采用创建Qt Designer插件的方式来创建QwBattery类,并将其安装到UI设计器的组件面板里。该类的功能与上篇所讲的QmyBattery类功能一样。
要创建UI设计器插件类,单击Qt Create的“File”-> "New File Project"菜单,在出现的对话框里选择”其它项目“分组里的”Qt4设计师自定义控件“,会出现一个向导对话框,按向导逐步完成项目创建。
完成设置后生成的项目的文件组织结构如下图。
插件项目各文件的功能实现
1. QwBatteryPlugin类
qwbatteryplugin.h文件是对插件类QwBatteryPlugin的定义。完整代码如下
class QwBatteryPlugin : public QObject, public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
#if QT_VERSION >= 0x050000
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")
#endif // QT_VERSION >= 0x050000
public:
QwBatteryPlugin(QObject *parent = 0);
bool isContainer() const;
bool isInitialized() const;
QIcon icon() const;
QString domXml() const;
QString group() const;
QString includeFile() const;
QString name() const;
QString toolTip() const;
QString whatsThis() const;
QWidget *createWidget(QWidget *parent);
void initialize(QDesignerFormEditorInterface *core);
private:
bool m_initialized;
};
untitled.pro 略
内置项目qwbattery.pri
项目里组件QwBattery类的定义与上篇QmyBattery类的定义基本一样,只是在声明这个类的时候需要加一个宏QDESIGNER_WIDGET_EXPORT,并使用Q_PROPERTY宏定义了一个属性powerLevel。QwBattery类的完整定义如下
class QDESIGNER_WIDGET_EXPORT QwBattery : public QWidget
{
Q_OBJECT
//自定义属性
Q_PROPERTY(int powerLevel READ powerLevel WRITE setPowerLevel NOTIFY powerLevelChanged DESIGNABLE true)
public:
QwBattery(QWidget *parent = 0);
private:
QColor mColorBack = Qt::white; //背景颜色
QColor mColorBorder = Qt::black; //电池边框颜色
QColor mColorPower = Qt::green; //电池柱颜色
QColor mColorWarning = Qt::red; //电量短缺时的颜色
int mPowerLevel = 60; //电量0-100
int mWarnLevel = 20; //电量低警示阈值
protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
public:
void setPowerLevel(int pow); //设置当前电量
int powerLevel();
void setWarnLevel(int warn); //设置电量低阈值
int warnLevel();
QSize sizeHint(); //缺省大小
signals:
void powerLevelChanged(int);
};
插件的编译与安装
在release模式下编译后,会产生qwbatteryplugin.dll和qwbatteryplugin.lib两个文件。
qwbatteryplugin.dll是插件的动态链接库文件,需要将此文件复制到Qt Creator的插件目录和Qt的插件目录下。
例如Qt安装在D:\Qt\Qt5.9.1目录下,需要复制的路径就是:
D:\Qt\Qt5.9.1\Tools\QtCreator\bin\plugins\designer
D:\Qt\Qt5.9.1\5.9.1\msvc2015\plugins\designer
重启Qt Creater,使用UI设计器窗口时,在左侧组件面板会看到增加了一个”My Widget"分组,里面有自定义的组件。
要让插件在Qt creator的UI设计器里正常显示,编译插件项目的编译器必须与编译Qt Creator的编译器一致。
debug和release模式要相对应,debug模式生成的lib和dll文件名后面会自动增加一个字母“d“