当前位置: 首页 > news >正文

Qt自定义控件

自定义控件

可以通过自定义控件的方式来将一个自定义控件整体放置在需要的位置。

静态自定义

步骤如下:
1.qt中添加一个新类
2.在要提升的界面对其进行提升选项的增加
3.进行提升,然后对应的对象就可以直接作为一个新类使用
4.直接编译运行即可

动态自定义控件

自定义控件制作过程

  1. 新建项目
    文件
    新建文件或项目
    其他项目
    Qt4设计师自定义控件
    然后选定插件源码位置与插件项目名称。
  2. 设置自定义控件列表
    1. 控件类
      设置要创建的自定义控件类
    2. 源文件
      这个一般不用管,直接使用创建控件类之后默认创建出来的文件即可。
    3. 说明
      说明栏中可以设置对应控件在Qt designer中显示的组类型。也可以设置工具提示信息等
    4. 默认属性
      这个一般不用管。
  3. 默认生成的自定义插件项目是没有ui文件的,如果想要在编写自定义插件以ui形式进行编辑,可以在对应项目中添加一个新的Qt设计师界面类,不过这个类要和该项目中的类一样,从而达到覆盖初始项目的.h .cpp源文件的目的。

自定义控件使用过程

将生成的插件动态库放置在Qt designer的插件动态库路径下,只是可以在Qt Designer中显示并拖拽对应的控件。这样是无法通过编译的,他还需要将对应的以及头文件添加在当前项目,才可以通过整个的编译过程:
使用过程如下:

  1. 将生成的动态库放到Qt安装目录(Qt5_8_0/Tools/QtCreator/lib/Qt/plugins/designer)下,这样就可以在desiginer中显示对应的自定义控件并使用。
  2. 先说原理,将动态库引用到当前项目中就是如下方式,但是实际使用过程中会需要进行修改,以下的操作就需要每次更新完毕再复制一次,比较繁琐:
    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崩溃的话,可以从以下角度入手处理问题:

  1. 重新编译插件文件
  2. 属性中的变量和接口都要定义在类的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文件管理项目)。之后修改新增插件的相关代码即可,修改这部分主要从下面几个方面入手:

  1. 插件的控件类型
  2. 插件类型
  3. Q_EXPORT_PLUGIN2宏
  4. Q_PLUGIN_METADATA宏
    具体就是直接右键查看当前项目中已有插件类型的引用位置,然后参考着进行添加即可。

注意事项

  1. 自定义控件要注意编译自定义控件的Qt版本编译Qt Creater的Qt版本要一致,否则就会出现编译出来的自定义控件在Qt designer的控件列表上无法显示。
  2. 加载插件时,Qt会做一些检测去确认是否可以加载并使用插件,这就提供了使用并且配置多个版本的Qt库的功能;同时需要注意版本的问题:
    1. 使用较高版本的Qt库编译而成的插件不会被较低版本的Qt库所加载,如Qt5.0.0将不会加载使用Qt5.0.1编译的插件
    2. 使用较低主版本号编译而成的Qt库插件将不会被具有较高主版本号的库加载。如Qt5.0.1不能加载Qt4.8.2编译出来的插件,Qt5.1.1就可以加载Qt5.1.0或者Qt5.0.3编译出来的插件
  3. 当构建插件去扩展应用程序的时候,要确保插件和程序的配置相同,也就是说,如果程序编译在release模式下,插件也应该在release模式下编译,除了Unix操作系统,插件系统不会加载不同模式下编译出来的插件;
  4. 如果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用的。

相关文章:

  • SpringBoot SpringBoot 原理篇 1 自动配置 1.8 bean 的加载方式【六】
  • 【小5聊】纯javascript实现图片放大镜效果
  • 现代密码学导论-18-伪随机置换
  • 23. [Python GUI] PyQt5中的模型与视图框架-抽象视图基类QAbstractItemView
  • ARM 37 个通用寄存器详解
  • [附源码]java毕业设计中医药系统论文2022
  • HTML常用标记(超详解)
  • C语言中不透明指针和对象
  • b、B、KB、Kib、MB、MiB、GB、GiB、TB、TiB的区别
  • MyBatis-Plus中的更新操作(通过id更新和条件更新)
  • 【学生网页设计作业源码】基于HTML+CSS+JavaScript简单的大学生书店(13个页面) 二手书店电子商务网站模板源码
  • bat批处理脚本大全
  • 秋招面经第八弹:网易二面-数据开发工程师
  • 国际结算业务
  • 基于SSM的高校共享单车管理系统【数据库设计、源码、开题报告】
  • Linux——进程
  • 【看表情包学Linux】冯诺依曼架构 | 理解操作系统 | 基于 Pintos 实现新的用户级程序的系统调用
  • 单链表——简单的增删查改
  • 电子技术——MOS放大器基础
  • 嵌入式 学习
  • 【Linux】vim编辑器的使用
  • 强化学习笔记:基于策略的学习之策略迭代(python实现)
  • 1. Spring 基础入门
  • springboot 分布式全局唯一id的生成-雪花算法snowflake
  • 如何使用VMware虚拟机(带你快速了解)
  • 更改代码之后,上传到服务器操作
  • armqt字体ttf_Qt4.7支持中文显示及制作QT支持的字体文件
  • elasticsearch linux 后台服务,Elasticsearch 2.3.0 安装成服务
  • 接受参数的包装类的数据类型写错报错
  • 配置ap_华三无线二层网络注册配置方法
  • 多数据源 2.3.2 发布:支持 spel 从参数获取数据源
  • linux查看test文件夹,如何在Linux中使用test命令
  • eps高程点和高程注记不符_各种桥梁支座施工工艺大盘点
  • SQL Server下ADO.NET 怎么获取数据库SQL语句INSERT,UPDATE,DELETE了多少行数据
  • linux终端rss阅读,QuiteRSS: Linux桌面的RSS阅读器 你值得拥有