二十三、QML——Qt Design Studio生成CMake
qds
就是Qt Design Studio
,本章节记录,如何创建 Qt Design Studio
和 Qt Creator
共同开发项目。
-
第一节实现了
Qt Design Studio
生成 CMakeList 文件,然后使用Qt Creator
编辑。 -
第二节是对整个项目文件的分析
-
第三节想把C++对象封装成QML插件,然后使用
Qt Design Studio
访问,实例化创建对象,但是没有成功,可能是因为动态库的链接问题。
1 创建共同开发项目
1.1 创建一个 Qt Design Studio
项目
创建一个 Qt Design Studio
项目
使能该项目 Enable CMake Generator
1.2 使用 Qt Creator
打开CMakeLists
1.3 Qt Creator
编译失败问题
1.3.1 由于 Windows
长路径问题,导致编译失败。
解决方案:
通常是使用较短的路径,比如:C:\dev
Qt Creator 13
提出了一种不同的解决方法,对源项目目录和构建目录使用软连接。
一共有两种方法,一个是对于所有使用 Qt Creator
项目都使用,另一个是仅仅对目前项目使用。
第一种:通过设置 CMake
对所有项目都启用。
第二种:通过设置 CMakeLists.txt.shared
单独启用 QTC_CMAKE_USE_JUNCTIONS
通过在软连接目录创建和删除问题,相应的源目录的文件也会变化。
2 项目CMakeLists分析
主目录下的 CMakeLists.txt
会调用以下几个部分构建应用程序 qds.cmake
、App
、cmake
、StudyProject
、StudyProjectContent
里面的 CMakeLists.txt
或 ***.cmake
文件。
2.1 关于qml库问题
比如 StudyProject
目录里面定义了
qds.cmake
却只调用了 libStudyProjectContentplugin.a
静态库,但是看编译文件 build.ninja
,编译应用程序的时候也调用了 libStudyProjectContent.a
静态库。
2.2 关于 qmlcomponents
库
这部分是 Qt Design Studio
定义的 qml组件,比如:ArcItem
、Glow
、QuickStudioApplication
等等。
3 创建C++插件导入qds
制作插件(或者说是动态库)是很常见的需求,其实也可以说是将qml文件或者c++文件封装成静态库或者动态库,提供moudle信息,然后给其他qml界面调用。
-
我认为这里的插件Plugin,可以等同认为是模组Moudle,因为可以在qml文件中直接调用该Plugin。
-
C++编写的对象组件和qml编写的对象组件都可以一起封装成一个插件。
-
CMake中使用
qt_add_qml_module
直接生成相关的文件和库。(一般情况下,qt_add_qml_module
等同于qt6_add_qml_module
) -
存在问题:无法给
Qt Design Studio
使用,应该是由于动态库链接问题造成。
3.1 生成Qt Quick扩展插件
3.2 分析生成的扩展插件组成
生成前只有三个文件,使用 qt_add_qml_module
生成相关静态库和类型描述文件:
qt_add_qml_module
生成相关的文件分析:
注意:qmldir
文件和 Test.qmltypes
文件
-
qmldir: 是用来描述插件的相关信息。文件中的
typeinfo
指明当前插件对应的 .qmltypes 文件是什么。 -
Test.qmltypes:用于定义 QML 类型的元信息(好像只是用来描述C++文件定义的对象信息)
-
如果使用该
Test
插件(模块),只需要调用libTestplugin.a
库即可。也就是target_link_libraries(ExampleProject PRIVATE Qt6::Quick Testplugin)
就可以。(因为libTestplugin.a
库会链接libTest.a
库)
3.3 插件无法再qds中使用
我分析可能得原因:
-
动态库 Liplugin.dll 链接其他库的问题。
-
我暂时不用这部分内容也可以,不是必须要解决的问题,所以暂时不做研究了。