qml知识点概括一

1.qml语言是什么?有什么优点?

(1) 程序开发者与UI设计师可以同时使用qml进行高效的开发,而无需原型设计
(2)qml使得快速UI原型开发成为可能。
(3)qml对小屏幕设备开发可伸缩的界面,此外qml可以方便快速的创建漂亮、流畅、细腻的动画。
(4)Qtquick于qtwidget相比的优点,前者支撑流畅的动画UI,以及触摸屏支撑
(5)QtQuick提供比较多的图形效果,而qtwidget则需要去实现。

2.qml的语言的本质是什么

(1) Qt 引入了一种声明式脚本语言,称为 QML(Qt Meta Language 或者 Qt Modeling Language),作为 C++ 语言的一种替代。而 Qt Quick 就是使用 QML 构建的一套类库。 QML 是一种基于 JavaScript 的声明式语言
(2) qt quick是说使用QML的声明式语言构建用户界面,底层使用javaScript实现其逻辑
(3) QML 文档是运行时解释的,不需要经过编译。利用 QML 的解释执行的特性,QML 尤其适合于快速开发和原型建模。另外,由于QML 比 C++ 简单很多,所以 QML 也适用于提供插件等机制。
(4) QML笔记(四):动态修改qml文件,不需要重新编译程序,修改生效
从 Qt 4.7 开始,Qt 
引入了一种声明式脚本语言,称为 QML(Qt Meta Language 或者 Qt Modeling Language),作为 C++ 语言的一种替代。而 Qt Quick 就是使用 QML 构建的一套类库。 QML 是一种基于 JavaScript 的声明式语言。在 Qt 5 中, QML 有了长足进步,并且同 C++ 并列成为 Qt 的首选编程语言。也就是说,使用 Qt 5,我们不仅可以使用 C++ 开发 Qt 程序,而且可以使用 QML。虽然 QML 是解释型语言,性能要比 C++ 低一些,但是新版 QML 使用 V8,Qt 5.2 又引入了专为 QML 优化的 V4 引擎,使得其性能不再有明显降低。在 Nokia 发布 Qt 4.7 的时候,QML 被用于开发手机应用程序,全面支持触摸操作、流畅的动画效果等。但是在 Qt 5 中,QML 已经不仅限于开发手机应用,也可以用户开发传统的桌面程序。
QML 文档描述了一个对象树。QML 元素包含了其构造块、图形元素(矩形、图片等)和行为(例如动画、切换等)。这些 QML 元素按照一定的嵌套关系构成复杂的组件,供用户交互。
——摘自《Qt学习之路2》
————————————————
版权声明:本文为CSDN博主「52_赫兹的鲸」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40194498/article/details/79849807

3.qml文件文档结构以及界面布局元素

//import部分
import QtQuick 2.1
import QtQuick.Window 2.0

//declaration部分
Window {
    visible: true
    width: 360
    height: 360
    
    MouseArea {
        anchors.fill: parent
        onClicked: {
            Qt.quit();
        }
    }
    
    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
}

(1)一个 QML 文档分为 import 和 declaration 两部分。前者用于引入文档中所需要的组件(有可能是类库,也可以是一个 JavaScript 文件或者另外的 QML 文件);后者用于声明本文档中的 QML 元素。
(2)每一个 QML 有且只有一个根元素,类似于 XML 文档。这个根元素就是这个 QML 文档中定义的 QML 元素,在这个例子中就是一个 Window 对象。
(3) 注意一下这个 QML 文档的具体语法,非常类似于 JSON 的定义,使用键值对的形式区分元素属性。所以我们能够很清楚看到,我们定义了一个窗口,可见性为真,宽度为 360 像素,高度为 360 像素。
(4) QML 文档定义了一个对象树,所以 QML 文档中元素是可以嵌套的。在这个窗口中,我们又增加了一个 Text 元素,顾名思义,就是一个文本。Text 显示的是 Hello World 字符串,而这个字符串是由 qsTr()函数返回的。qsTr()函数就是 QObject::tr()函数的 QML 版本,用于返回可翻译的字符串
(5) Text 的位置则是由锚点(anchor)定义。示例中的 Text 位置定义为 parent 中心,其中 parent 属性就是这个元素所在的外部的元素。anchors.centerIn: parent同理,我们可以看到MouseArea 是充满父元素的。
(6) MouseArea 还有一个 onClicked 属性。这是一个回调,也就是鼠标点击事件。 MouseArea可以看作是可以相应鼠标事件的区域。当点击事件发出时,就会执行 onClicked 中的代码。这段代码其实是让整个程序退出。注意我们的 MouseArea充满整个矩形anchors.fill: parent,所以整个区域都可以接受鼠标事件
————————————————
版权声明:本文为CSDN博主「52_赫兹的鲸」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40194498/article/details/79849807

4.qml常见的对象类型

(1) Item

The Item type is the base type for all visual items in Qt Quick.
All visual items in Qt Quick inherit from Item. Although an Item object has no visual appearance, it defines all the attributes that are common across visual items, such as x and y position, width and height, anchoring and key handling support.
The Item type can be useful for grouping several items under a single root visual item. For example:

 import QtQuick 2.0

 Item {
     Image {
         source: "tile.png"
     }
     Image {
         x: 80
         width: 100
         height: 100
         source: "tile.png"
     }
     Image {
         x: 190
         width: 100
         height: 100
         fillMode: Image.Tile
         source: "tile.png"
     }
 }

(2) addImportPath 设置qml模块路径

quickWidget->engine()->addImportPath(TaoQuickImportPath);

void QQmlEngine::addImportPath(const QString &path)
Adds path as a directory where the engine searches for installed modules in a URL-based directory structure.
The path may be a local filesystem directory, a Qt Resource path (:/imports), a Qt Resource url (qrc:/imports) or a URL.
The path will be converted into canonical form before it is added to the import path list.
The newly added path will be first in the importPathList().

(3)setContextProperty 设置qobject对应的qml文档属性

void QQmlContext::setContextProperty(const QString &name, QObject *value)
Set the value of the name property on this context.
QQmlContext does not take ownership of value.

5.window下IDE的选择

(1) 若使用vs2019以及q插件进行qml相关开发,存在无法通过qt design studio编辑界面的问题。

(2) 因此需要vs2019+qt插件编译工程代码,而使用qt design studio来查看界面的设计的效果。

(3)存在问题为taoqiuck不是一个纯的qml工程,而是一个包含c++以及qml的工程,而taoquick的相关的组件是通过c++ addImportPath 导入模块的路径,因此在qt design studio中会提示该模块的缺失。

(4)综合考虑最终还是使用qt creator的方向进行taoquick相关的软件界面搭建以及代码生成,而使用vs2019进行相关代码的调试

(5)__src_TaoQuick_TaoQuick_qmlcache.qrc在vs下编译无法找到的问题,直接手动将qt生成的文件复制到该路径该问题还是无法解决,因此使用qt进行编译c++以及界面设置,使用vs 进行代码的调试。
(6) qt的环境的中语法智能识别速度相比较vs慢比较多。在qt中通过预编译文件已经导入的vtk插件的相关库,但是在qtcreator环境仍然显示待类型无法识别,但是在vs中可以正常势必欸

6 pro文件的TEMPLE

(1) QT工程pro文件模板变量(TEMPLATE)

模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:

app - 建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
lib - 建立一个库的makefile。
vcapp - 建立一个应用程序的Visual Studio项目文件
vclib - 建立一个库的Visual Studio项目文件。
subdirs - 这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。
“app”模板

“app”模板告诉qmake为建立一个应用程序生成一个makefile。当使用这个模板时,下面这些qmake系统变量是被承认的。你应该在你的.pro文件中使用它们来为你的应用程序指定特定信息。

HEADERS - 应用程序中的所有头文件的列表。
SOURCES - 应用程序中的所有源文件的列表。
FORMS - 应用程序中的所有.ui文件(由Qt设计器生成)的列表。
LEXSOURCES - 应用程序中的所有lex源文件的列表。
YACCSOURCES - 应用程序中的所有yacc源文件的列表。
TARGET - 可执行应用程序的名称。默认值为项目文件的名称。(如果需要扩展名,会被自动加上。)
DESTDIR - 放置可执行程序目标的目录。
DEFINES - 应用程序所需的额外的预处理程序定义的列表
INCLUDEPATH - 应用程序所需的额外的包含路径的列表。
DEPENDPATH - 应用程序所依赖的搜索路径。
VPATH - 寻找补充文件的搜索路径。
DEF_FILE - 只有Windows需要:应用程序所要连接的.def文件。
RC_FILE - 只有Windows需要:应用程序的资源文件
RES_FILE - 只有Windows需要:应用程序所要连接的资源文件。
你只需要使用那些你已经有值的系统变量,例如,如果你不需要任何额外的INCLUDEPATH,那么你就不需要指定它,qmake会为所需的提供默认值。例如,一个实例项目文件也许就像这样:

   TEMPLATE = app
   DESTDIR  = c:\helloapp
   HEADERS += hello.h
   SOURCES += hello.cpp
   SOURCES += main.cpp
   DEFINES += QT_DLL
   CONFIG  += qt warn_on release

如果条目是单值的,比如template或者目的目录,我们是用“=”,但如果是多值条目,我们使用“+=”来为这个类型添加现有的条目。使用“=”会用新值替换原有的值,例如,如果我们写了DEFINES=QT_DLL,其它所有的定义都将被删除。

(2) “lib”模板

“lib”模板告诉qmake为建立一个库而生成makefile。当使用这个模板时,除了“app”模板中提到系统变量,还有一个VERSION是被支持的。你需要在为库指定特定信息的.pro文件中使用它们。

VERSION - 目标库的版本号,比如,2.3.1。

(3) “subdirs”模板

“subdirs”模板告诉qmake生成一个makefile,它可以进入到特定子目录并为这个目录中的项目文件生成makefile并且为它调用make。

在这个模板中只有一个系统变量SUBDIRS可以被识别。这个变量中包含了所要处理的含有项目文件的子目录的列表。这个项目文件的名称是和子目录同名的,这样qmake就可以发现它。例如,如果子目里是“myapp”,那么在这个目录中的项目文件应该被叫做myapp.pro。

(4) CONFIG变量

配置变量指定了编译器所要使用的选项和所需要被连接的库。配置变量中可以添加任何东西,但只有下面这些选项可以被qmake识别。

下面这些选项控制着使用哪些编译器标志:

release - 应用程序将以release模式连编。如果“debug”被指定,它将被忽略。
debug - 应用程序将以debug模式连编。
warn_on - 编译器会输出尽可能多的警告信息。如果“warn_off”被指定,它将被忽略。
warn_off - 编译器会输出尽可能少的警告信息。
下面这些选项定义了所要连编的库/应用程序的类型:

qt - 应用程序是一个Qt应用程序,并且Qt库将会被连接。
thread - 应用程序是一个多线程应用程序
x11 - 应用程序是一个X11应用程序或库。
windows - 只用于“app”模板:应用程序是一个Windows下的窗口应用程序。
console - 只用于“app”模板:应用程序是一个Windows下的控制台应用程序
dll - 只用于“lib”模板:库是一个共享库(dll)。
staticlib - 只用于“lib”模板:库是一个静态库。
plugin - 只用于“lib”模板:库是一个插件,这将会使dll选项生效。
例如,如果你的应用程序使用Qt库,并且你想把它连编为一个可调试的多线程的应用程序,你的项目文件应该会有下面这行:

CONFIG += qt thread debug

注意,你必须使用“+=”,不要使用“=”,否则qmake就不能正确使用连编Qt的设置了,比如没法获得所编译的Qt库的类型了。
————————————————
版权声明:本文为CSDN博主「qinpanke」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qinpanke/article/details/22199271

7.qt调试环境变量设置

# 8.开发环境准备

(1) 尝试使用cmake作为开发环境,但是cmake工程目录下taoquick无法组件无法正常显示,

(2) 通过将taoquick放入对应qt creator 中qml的目录下发现,taoquick组件可以显示,但是无法通过拖拽加载.

(3)通过qt creator 8.01大概料场模块化的软件项目发现,该项目可以正常编译,但是设计模式中显示qml效果却经常卡顿

(4) 使用qt desgin studio 打开pro文件后,发现该项目不仅可以正常编译,且显示正常

(5)使用vs2019 qt插件导入pro文件后,编译发现亦可正常运行

(6) 至此qt_qml开发环境配置完成,后续使用qt design studio进行界面的设计,而使用vs进行代码的编译,提高提示速度。

(7)从头开始配置该开发环境需要在qt design studio 中进行。

9 qt 助手是一个很好的查询工具

posted @ 2023-07-12 11:57  ID是菜鸟  阅读(200)  评论(0编辑  收藏  举报