效果:
以下以新建一个自定义按钮为例。
优快云免积分资源
- 新建一个Qt项目,选择“其他项目”->"Qt4设计师自定义控件“
-
填入项目名称: CustomPushButton。勾选构建的套件,MinGW构建的控件不能够在MSVC编译器下的项目使用,同样MSVC构建的控件不能够在MinGW编译器下项目使用。
-
点击下一步,修改控件类名称,会自动生成其他的输入内容,可以根据自己的需求进行修改,例如可以自定义这个控件的显示图标。
- 切换到“说明”选项卡,填入组名称。
组名称是在Qt Designer中控件所属的组,如下:
- 点击下一步,填入插件名称,可以自己定义。后面默认点击下一步
- 工程创建完成后我们需要对项目文件进行一些修改。首先是“customqpushbutton”下的头文件
修改为:
#ifndef CUSTOMPUSHBUTTON_H
#define CUSTOMPUSHBUTTON_H
#include <QWidget>
#include <QPushButton>
#include <QtUiPlugin/QDesignerExportWidget>
class QDESIGNER_WIDGET_EXPORT CustomPushButton : public QPushButton
{
Q_OBJECT
public:
CustomPushButton(QWidget *parent = 0);
};
#endif // CUSTOMPUSHBUTTON_H
- 修改项目头文件中的“customqpushbuttonplugin.h”文件。
将
#include <QDesignerCustomWidgetInterface>
修改为
#include <QtUiPlugin/QDesignerCustomWidgetInterface>
- 此时即可对这个自定义按钮添加一些自定义的属性。例如我们添加一个按钮字体大小的属性:fontSize
控件的属性有读和写两个方法。
我们在custompushbutton.h中定义属性:
Q_PROPERTY(int fontSize READ getFontSize WRITE setFontSize)
添加读写两个方法和字体大小成员变量
private:
int getFontSize() const;
void setFontSize(const int &size);
private:
/// 字体大小
int fontSize = 12;
int CustomPushButton::getFontSize() const {
return fontSize;
}
void CustomPushButton::setFontSize(const int &size) {
fontSize = size;
this->setStyleSheet(tr("QPushButton{font-size:%1px;}").arg(fontSize));
this->update();
}
-
自定义属性完成之后即可开始对项目编译,选择你编译器,点击构建
-
构建完成后即可在项目编译文件夹中找到生成的dll文件
- 我们将生成的这个dll文件放到Qt的designer文件夹中
- 此时打开Qt designer,即可在控件栏找到我们刚才新建的按钮控件
将这个控件拖动到我们的窗口,可以在属性编辑器中看到我们添加的字体大小的属性,修改这个属性,可以观察到控件的字体大小发生了变化。
- 此时我们已经完成了对自定义控件的封装。当我们希望引用这个控件到我们的项目中时,需要对其dll库和头文件进行引用。即在新项目的头文件中。
- 将头文件custompushbutton.h和生成的dll库放到我们新建的项目文件夹中(或者其他的路径),在新项目的pro文件中引用dll库,并添加头文件路径,如下:
# 自定义控件头文件&库文件
INCLUDEPATH += $$PWD/custom/include
# 按照debug、release区分库名称,MinGW和MSVC调用不同文件夹库
CONFIG(debug, debug|release){
win32-g++ {
LIBS += -L$$PWD/custom/MinGW -lcustompushbuttond
}
else:msvc {
LIBS += -L$$PWD/custom/MSVC -lcustompushbuttond
}
}
else {
win32-g++ {
LIBS += -L$$PWD/custom/MinGW -lcustompushbutton
}
else:msvc {
LIBS += -L$$PWD/custom/MSVC -lcustompushbutton
}
}