CentOS 7.0下Qt5.8实现和使用Qt Creaor自定义控件
来源:互联网 发布:ff14暗战捏脸数据 编辑:程序博客网 时间:2024/06/06 14:22
CentOS 7.0下Qt5.8实现和使用Qt Creaor自定义控件
这几天下了一些Qt源代码学习Qt的编程技巧,在看了lx100991(CSDN上的上传者,感谢)的“Qt自定义精美表盘控件”的源代码后,加上之前学习动态库积累的一点知识,萌生了把控件做成Qt可可视拖动控件的念头,自定义控件的创建和使用有两个办法,一个是提升法,这里不介绍,比较容易掌握;另一个,就是设计可以在Qt Creator里可拖拽的控件,这是本文的重点。
我在网上搜了各种方法和例子,看了很多,都或多或少存在一些问题,主要表现在:
一是大部分例子是window下的;
二是部分人把创建动态库和创建自定义控件当成一回事了;
三是编译过程中还一些问题需要处理,各类帖子没有描述;
四是编译好后如何使用也有一些问题;
这儿我把我走的弯路细细梳理了一下,估计新学者应该也会遇到,也为自己留个记号。为了把整个过程描述清楚,每一步我都做了记录,可能有些冗繁了,高手莫怪,飘过就可以了J。
首先来张最后的实现后的效果图,我把lx100991的表盘控件做成了自定义控件,自己也随便做了一个,见图一。
图一 最终效果图
废话不多说了,下面开始进入正题。
一、 开发环境
虚拟机CentOS 7.0、Qt 5.8
二、 实现步骤
1)打开Qt Creator点击菜单“文件”下“新建文件或项目”,然后选择好“其他项目”->“Qt4设计师自定义控件”开发选项,不要弄错,我开始把自定义控件理解成Qt Creator插架弄混了,第一步就卡了好久。如图一所示:
图二 新建文件或项目界面
2)选择好后就点“Choose”进一步下一步。创建好自定义控件项目名称以及存放位置,我用lx100991的表盘为基础制作控件,所以我把项目命名为DasBoard然后点“下一步”。
图三 项目名称和创建路径设置
3)进入构建套件配置,这里不做修改默认即可,直接 点“下一步”。
图四 构建套件配置
4)进入自定义控件列表。这里主要是对自己设计的控件,进行定义。在控件类里输入类名,这里创建类名QDashBoard。设定好后右侧Tab栏选择,对QDashBoard进行设置,这里设置其父类为Qwdiget,QDashBoard这个类是你所有代码实现的地方,也就是你的自定义控件。其余【插件类名】、【插件头文件】、【插件源文件】不用修改,直接用默认就好。【图标文件】为自定义控件注册完成后,Qt控件列表中显示的控件图标,如需显示图标,必须在创建工程时,从这里引用。【说明】与【默认属性】Tab页,大家可自己根据实际情况编辑,默认页不影响控件使用(这里选择默认)。配置好后,点“下一步”。
图五 自定义控件列表
5)进入插件和集合类的信息页面,这里按照默认即可,点“下一步”。
图六 插件和集合类信息
6)进入项目管理页面,不做任何修改,点“完成”。
图七 项目管理页
7)创建好后,整个项目的文件结构如下图。Qt Creator一共创建了QDashBoard类以及QDashBoardPlugin类以及刚才选的资源文件:控件的图标。再强调一次QDashBoardPlugin类的所有信息暂时不用动(可能实现更多的功能要用到,一个帖子看到过介绍,但是实现一般的功能还不需要修改),QDashBoard类才是你实现功能的地方。
图八 项目结构图
8)修改DashBoard.pro文件,把CONFIG += plugindebug_and_release,改成CONFIG += plugin release,因为只有release版本编译后的才能使用。
9)到此为止就可以编译了,虽然什么功能都没有实现。这时会发现编译会产生一个warning。这个warning是:“Header<QtDesigner/QDesignerCustomWidgetInterface> is depreated.Please include<QtUiPlugin/QDesignerCustomWidgetInterface>。”如下图:
图九 第一个warning
这个warning很好解决,就是在qdashboardplugin.h头文件中把
#include < QDesignerCustomWidgetInterface > 改成
#include <QtUiPlugin/QDesignerCustomWidgetInterface>即可。
10)在QDashBoard类中实现自己的控件功能,这里我偷了个懒,把lx100991上传的精美表盘控件中的功能直接copy到了QDashBoard类中,这里不再赘述。再次编译后会得到控件的库文件,这里编译长生的库文件是ibqdashboardplugin.so。
11)将libqdashboardplugin.so拷贝到Qt Creator plugin目录下,这个最坑人,Qt Creator下有很多plugin目录,试了很多遍才把libqdashboardplugin.so拷贝对地方,我的plugin目录位置是:
/opt/Qt5.8.0/Tools/QtCreator/lib/Qt/plugins/designer
这个一定要拷对,不然在Qt Creator中出不来。大家可以按照上面相对路径对进行拷贝,如果实在不行就把Qt Creator下只要有plugins目录的地方都试一遍,我是这么干的:(。另外,我也看到一篇文章中提出了在编译目录下(也就是生成libqdashboardplugin.so的那个目录)用控制台执行makeinstall命令,我试了,最终发现make install没把libqdashboardplugin.so拷对地方,在Qt Creator中依然看不到实现的控件。
12)重新运行Qt Creator这下你就可以看到你实现的自定义控件啦!效果见本文第一张图。
三、 使用自定义控件编程
这里直接进入正题,创建一个工程,我建立一个MyTest工程,基于Qwidget的。把自定义QDashBoard控件拖拽到界面上,编译出现以下问题。
1)qdashboard.hNo such file or directary,如图十所示。这个问题是,找不到qdashboard.h文件,这个好解决,把qdashboard.h拷贝到Qt的include目录下即可,我的Qt include目录是:/opt/Qt5.8.0/5.8/gcc_64/include。
图十 找不到qdashboard.h
2)这时再次编译会出现第二个问题:undefined reference to ‘QDashBoard::QDashBoard(QWidget)’。
图十一 无法使用QDashBoard
估计大家基本上都会遇到这个问题。这个问题是因为Qt Creator找不到QDashBoard实现内容,也就是找不到libqdashboardplugin.so库的缘故。我想了半天也没想明白,libqdashboardplugin.so我不是正确拷到了Qt Creator目录下么?怎么就找不到了呢?后来我想了想我进行动态库使用时在编译时也遇到了这个情况,于是我就按照使用动态库的方法,把libqdashboardplugin.so进行包含,顺利解决问题。详细可见我的第一篇文章《linux下Qt动态库创建与调用学习笔记一(静态加载)》。解决步骤如下:
A) 在MyTest.pro文件中加上:
LIBS += -L/usr/mylib–lqdashboardplugin
图十二 LIBS配置
/usr/mylib是我放置自己编译库的地方,大家可以随便建立,同时把libqdashboardplugin.so拷贝这个目录下。
B) 在/etc/ld.so.conf中加入/usr/mylib,在控制台中执行ldconfig –v;
C) 这时再次编译问题解决,ok。
四、 小结
制作Qt Designer自定义控件,总体来说还是比较简单的,就是几个细节上的注意问题,再次说一下:一是生成的插件库文件一定要拷对地方,不然出不来;二是使用时头文件的包含以及库文件需要重新制定位置,要解决好。
另外,在解决图十一 无法使用QDashBoard问题时,我也试过了将QDashBoard类的头文件、cpp文件都include到测试项目MyTest中(图十三中标绿的地方)这个方法也好用,只不过控件的实现都需要给使用者。
到此结束。
阅读全文
0 0
- CentOS 7.0下Qt5.8实现和使用Qt Creaor自定义控件
- Qt自定义控件的开发和使用
- window10下qt creator下自定义并使用 基于Qt5.3.2
- Qt for Linux:在CentOS下编译Qt5.7
- QT5自定义控件
- qt自定义控件的使用
- QT 自定义控件使用问题
- CentOS 7下安装QT5.8
- CentOS下安装QT5
- CentOS下安装QT5
- CentOS下安装QT5
- CentOS下安装QT5
- CentOS下安装QT5
- linux下使用QT5.8实现虚拟键盘
- Andriod下完全自定义控件和在自定义控件中使用自定义属性
- Qt下使用ActiveX控件
- 利用QT制作自定义控件(linux下)
- centos环境下QT5的下载和安装
- (起步1)IDEA2016+VUE+WEBPACK+VUE-CLI 搭建
- Linux设备驱动之中断---thread使用示例
- http超文本协议,让http不再难懂
- 开发者们,2017年你们过得好吗?
- Java高级工程师面试知识汇总(二)
- CentOS 7.0下Qt5.8实现和使用Qt Creaor自定义控件
- 神临的uLua学习(一)
- quartz定时任务中常用的cron表达式
- Linux下Samba服务器安装
- 为什么使用微服务?
- re.S--python中正则
- Python入门(06) -- 正则表达式
- DOTween修改数值
- PyQt5+python3+pycharm开发环境配置