自定义控件
可以通过自定义控件的方式来将一个自定义控件整体放置在需要的位置。
静态自定义
步骤如下:
1.qt中添加一个新类
2.在要提升的界面对其进行提升选项的增加
3.进行提升,然后对应的对象就可以直接作为一个新类使用
4.直接编译运行即可
动态自定义控件
自定义控件制作过程
- 新建项目
- 设置自定义控件列表
- 控件类
设置要创建的自定义控件类 - 源文件
这个一般不用管,直接使用创建控件类之后默认创建出来的文件即可。 - 说明
说明栏中可以设置对应控件在Qt designer中显示的组类型。也可以设置工具提示信息等 - 默认属性
这个一般不用管。
- 默认生成的自定义插件项目是没有ui文件的,如果想要在编写自定义插件以ui形式进行编辑,可以在对应项目中添加一个新的
Qt设计师界面类
,不过这个类要和该项目中的类一样,从而达到覆盖初始项目的.h .cpp
源文件的目的。
自定义控件使用过程
将生成的插件动态库放置在Qt designer
的插件动态库路径下,只是可以在Qt Designer
中显示并拖拽对应的控件。这样是无法通过编译的,他还需要将对应的库
以及头文件
添加在当前项目,才可以通过整个的编译过程:
使用过程如下:
- 将生成的动态库放到Qt安装目录(Qt5_8_0/Tools/QtCreator/lib/Qt/plugins/designer)下,这样就可以在desiginer中显示对应的自定义控件并使用。
- 先说原理,将动态库引用到当前项目中就是如下方式,但是实际使用过程中会需要进行修改,以下的操作就需要每次更新完毕再复制一次,比较繁琐:
INCLUDEPATH += /home/i/controlers/test.h # 这个是插件文件的头文件
LIBS += /home/i/controlers/so/libtestplugin.so # 生成的动态库
- 一个比较方便的方法是直接将插件使用相关的文件都统一起来放置在一个目录下,自定义插件的pro文件修改,引用对应的头文件;然后插件项目的生成文件路径直接定义到
Qt Designer
插件路径下,这样每次更新就不需要复制粘贴等操作,直接使用即可。
自定义插件的属性
Q_PROPERTY(int m_intVal READ get_intVal WRITE set_intVal)
用于声明控件属性,然后就可以在Qt Designer的右侧属性栏中查看到对应的设置接口;Q_PROPERTY
宏只是声明了控件属性,具体的变量和函数接口都需要进行实现。
另外Qt Designer相当于一个界面显示的模拟器,在设置属性后即可动态的看到对应的界面变化。
注意事项
增加插件后,如果出现打开ui界面编写文件就Qt Creater
崩溃的话,可以从以下角度入手处理问题:
- 重新编译插件文件
- 属性中的变量和接口都要定义在类的
public
类型中,再重新编译插件文件。
同组自定义插件扩繁
不同项目的扩展
不同项目的扩展只需要在创建时指定自定义插件类型的说明
栏中的组
属性为目标组即可,同组的自定义插件在Qt Designer
中就是显示在一个区域中:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GTyew7zh-1669469281171)(./images/DesginerPluginGroup.png)]
相同项目的多个插件扩展
相同项目下直接扩展插件的方式,这个和Qt版本有很大关系,比较核心的就是Q_EXPORT_PLUGIN2(test2plugin, Test2)
宏,这个宏一般声明的就是插件类型。相同自定义插件项目要参考对应Qt版本默认的实现方式,可以直接手动新建一个包含多个插件的项目,然后参考进行实现。
虽然实现的逻辑可能不太一样,但是整体上就是以下几个文件:
<name>.h
<name>.cpp
<name>.pri
<name>plugin.h
<name>plugin.cpp
想要扩展的话,首先创建一个自定义控件项目,得到一份默认的自定义插件代码,然后将这些代码文件复制到目标项目中(pro文件管理项目)。之后修改新增插件的相关代码即可,修改这部分主要从下面几个方面入手:
- 插件的控件类型
- 插件类型
- Q_EXPORT_PLUGIN2宏
- Q_PLUGIN_METADATA宏
具体就是直接右键查看当前项目中已有插件类型的引用位置,然后参考着进行添加即可。
注意事项
- 自定义控件要注意
编译自定义控件的Qt版本
和编译Qt Creater的Qt版本
要一致,否则就会出现编译出来的自定义控件在Qt designer的控件列表上无法显示。 - 加载插件时,Qt会做一些检测去确认是否可以加载并使用插件,这就提供了使用并且配置多个版本的Qt库的功能;同时需要注意版本的问题:
- 使用较高版本的Qt库编译而成的插件不会被较低版本的Qt库所加载,如Qt5.0.0将不会加载使用Qt5.0.1编译的插件
- 使用较低主版本号编译而成的Qt库插件将不会被具有较高主版本号的库加载。如Qt5.0.1不能加载Qt4.8.2编译出来的插件,Qt5.1.1就可以加载Qt5.1.0或者Qt5.0.3编译出来的插件
- 当构建插件去扩展应用程序的时候,要确保插件和程序的配置相同,也就是说,如果程序编译在release模式下,插件也应该在release模式下编译,除了Unix操作系统,插件系统不会加载不同模式下编译出来的插件;
- 如果Qt配置为在调试和发布模式下构建,但仅在发布模式下构建应用程序,则需要确保插件也以发布模式构建。 默认情况下,如果Qt的调试版本可用,则插件仅在调试模式下构建。 要强制插件在发布模式下构建,请将以下行添加到插件的项目文件中:
CONFIG += release
这将确保插件与应用程序中使用的库版本兼容。
Qt Creater编译使用的Qt库版本
查询Qt Creator版本
graph LR
帮助 --> 关于Qt Creator
其中有一个基于Qt的版本号,这是Qt Creator所编译用的Qt库版本version1
qmake版本
qmake -v
此命令可以查询目前所使用的qmake版本,以及Qt库,或者到工具->选项->构建和运行->Qt版本 设置Qt版本version2;
Qt自定义控件插件刷新
在Qt Creator中,到页面编辑器中之后,工具->页面编辑器->关于Qt设计师插件 可以或者Qt的插件信息,包括未加载成功原因,每次添加完插件之后到此处刷新即可
下载新的Qt版本
在下载新的Qt版本的时候,要下载.tar.gz类似的包,不要下载zip的,zip是给windows用的。