qt 自定义控件的使用以及遇到的问题
这篇文章会详细说明qt自定义控件的创建->使用过程。
qt自定义控件会以插件的形式导入,导入成功后可以直接在工程ui中拖拽。
一、自定义控件插件的编译
1、打开qtcreator,新建工程项目,选择其他项目->Qt4设计师自定义控件。
2、输入工程名称(插件编译的工程名),这里以View_label为例
3、选择编译器
注意:选择的编译器必须是对应qt版本的,比如我的qt版本是Qt5.9.2 MSVC 2015 32位版本,那么我们就需要选择MSVC2015 32位编译器。
4、创建控件类(控件的操作,样式等需要在这个类中处理)
5、确定插件的名称(导入的时候需要用到,可以使用自动生成的)
6、修改控件程序
完成后,我们进入view_label.h中稍微修改一下。
#ifndef VIEW_LABEL_H
#define VIEW_LABEL_H
#include <QWidget>
#include <QtUiPlugin/QDesignerExportWidget>
#include <QPushButton>
class QDESIGNER_WIDGET_EXPORT View_label : public QWidget
{
Q_OBJECT
public:
View_label(QWidget *parent = 0);
QPushButton *m_button;
};
#endif
这里新建一个按键。
然后进入到view_label.cpp中,把按键实例化,构造函数中加入
m_button = new QPushButton(this);
注意:可以往里面加入信号,那么就可以在调用的时候绑定触发信号。
7、编译
然后把工程设为release模式,qmake ,然后构建项目。
之后可以在输出的文件路径/release/文件夹中找到view_labelplugin.lib与view_labelplugin.dll
复制粘贴到QT安装路径designer目录下,例如我的安装路径D:\Qt\Qt5.9.2\5.9.2\msvc2015\plugins\designer。粘贴完后可以在D:\Qt\Qt5.9.2\5.9.2\msvc2015\bin目录下打开designer.exe,可以看到左边工具栏中的自定义部件一栏中有
可以看到已经导入了。
复制粘贴到qtcreator的路径下,如我的creator路径下D:\Qt\Qt5.9.2\Tools\QtCreator\bin\plugins\designer
则,可以用Qtcreator中的designed创建自定义部件。
以上,自定义部件就生成完毕了。下面我们来使用这个自定义部件
二、使用自定义部件
1、任意创建一个工程,我这里以untitled2为例
在工程文件中添加文件夹lib和include
往lib中放入第一步中生成的view_labelplugin.lib
往include中放入view_labelplugin.h文件
往.pro文件中加入
LIBS += $$PWD/lib/view_labelplugin.lib
INCLUDEPATH += $$PWD/include
2、进入include中,把view_labelplugin.h中class 旁的宏QDESIGNER_WIDGET_EXPORT删除
修改如下
#ifndef VIEW_LABEL_H
#define VIEW_LABEL_H
#include <QWidget>
#include <QPushButton>
class View_label : public QWidget
{
Q_OBJECT
public:
View_label(QWidget *parent = 0);
QPushButton *m_button;
};
#endif
3、进入ui文件中,把自定义部件view_label拉到窗口里
4、编译
报错是因为dll没有检测到,那我们把view_label.dll复制到工程执行文件exe同级目录下。
问题解决啦,成功调用。