Qt添加自定义控件

前言

本文详细介绍在Windows 10和Ubuntu 14.04系统下,使用Qt Creator 4.9.0创建自定义控件的过程,并在项目中使用

1 Windows

1.1 说明

Qt Creator中编译项目使用的是MinGW/g++编译器,而Qt提供的Qt Creator本身是由MSVC2017编译的,所以Qt Creator中编译的插件无法在Qt Creator中使用,下面是我安装的Qt Creator
Qt添加自定义控件_第1张图片
Qt添加自定义控件_第2张图片
为了在Qt Creator中使用自定义插件,有两种方法,一种是也使用和Qt Creator版本相同的MSVC编译器编译插件,另一种就是使用MinGW重新编译Qt Creator

我选择安装MSVC编译器,需要下载安装Visual Studio 2017

1.2 安装MSVC

首先下载Visual Studio 2017,我下载的是社区版
Qt添加自定义控件_第3张图片
下载好之后,按照提示安装即可
Qt添加自定义控件_第4张图片

1.3 安装Qt Creator

把原来的Qt Creator卸载掉,重新下载安装Qt Creator

安装的时候,勾选红框中的两项,然后等待安装完成
Qt添加自定义控件_第5张图片

1.4 创建自定义控件

在Qt Creator点击新建文件或项目,选择Qt4 设计师自定义控件
Qt添加自定义控件_第6张图片
之后输入项目名称,再点下一步,下一步
Qt添加自定义控件_第7张图片
这里需要选择和Qt Creator编译一致的编译工具链,也就是前面安装MSVC的原因
Qt添加自定义控件_第8张图片
然后在控件类框里输入名字,并把所有首字母都换成大写,注意首字母大写,按照编码规范命名,如果小写后面会与实例对象的默认名称出现冲突,会出现编译错误
Qt添加自定义控件_第9张图片
再下一步,下一步,直到完成
Qt添加自定义控件_第10张图片
最后创建项目目录如下
Qt添加自定义控件_第11张图片
把编译版本改为Release
Qt添加自定义控件_第12张图片
然后右键项目,点击清除,执行qmake,重新构建
Qt添加自定义控件_第13张图片
最后在你的编译目录下,会有dll文件和lib(MinGW编译的是.a文件)
Qt添加自定义控件_第14张图片
把dll和lib文件复制到Qt安装目录下的plugin/designer路径下,比如我Qt Creator安装是下面的路径

F:\Qt5.12.3\Tools\QtCreator\bin\plugins\designer

Qt添加自定义控件_第15张图片
到这里自定义控件创建完成

1.5 自定义控件使用

重新打开Qt Creator软件,新建一个Qt Widgets Application项目,就能在设计UI界面看到新添加的自定义控件
Qt添加自定义控件_第16张图片
但是编译的时候会报错

Error: dependent 'SonicWidget.h' does not exist.

这个时候需要把下面这三个文件复制到你新建的项目目录下

SonicWidget.cpp
SonicWidget.h
SonicWidget.pri

在新建的项目的.pro文件中添加下面代码

include(SonicWidget.pri)

再编译就没有问题了

2 Ubuntu

在Qt Creator点击新建文件或项目,选择Qt4 设计师自定义控件
Qt添加自定义控件_第17张图片
之后输入项目名称,再点下一步,下一步
Qt添加自定义控件_第18张图片
然后在控件类框里输入名字,并把所有首字母都换成大写
Qt添加自定义控件_第19张图片
再下一步,下一步,直到完成
Qt添加自定义控件_第20张图片
最后创建的项目目录如下
Qt添加自定义控件_第21张图片
把编译版本改为Release
Qt添加自定义控件_第22张图片
然后右键项目,点击清除,执行qmake,重新构建
Qt添加自定义控件_第23张图片
最后在你的编译目录下,会找到一个so

/build-SonicWidget-Desktop_Qt_5_12_3_GCC_64bit-Release/libsonicwidgetplugin.so

把生成的so拷贝你的Qt Creator的这个目录下,注意不同的Qt Creator版本,这个目录可能不一样,可以搜索designer文件夹

/opt/Qt5.12.3/Tools/QtCreator/lib/Qt/plugins/designer

重新打开Qt Creator软件,新建一个Qt Widgets Application项目,就能在设计UI界面看到新添加的自定义控件
Qt添加自定义控件_第24张图片
但是编译的时候会报错

make: *** No rule to make target `SonicWidget.h', needed by `ui_mainwindow.h'.  Stop.

这个时候需要把下面这三个文件复制到你新建的项目目录下

SonicWidget.cpp
SonicWidget.h
SonicWidget.pri

在新建的项目的.pro文件中添加下面代码

include(SonicWidget.pri)

再编译就没有问题了

你可能感兴趣的:(QT)