自定义Qt Designer插件

采用创建Qt Designer插件的方式来创建QwBattery类,并将其安装到UI设计器的组件面板里。该类的功能与上篇所讲的QmyBattery类功能一样。

要创建UI设计器插件类,单击Qt Create的“File”-> "New File Project"菜单,在出现的对话框里选择”其它项目“分组里的”Qt4设计师自定义控件“,会出现一个向导对话框,按向导逐步完成项目创建。

自定义Qt Designer插件_第1张图片

自定义Qt Designer插件_第2张图片

自定义Qt Designer插件_第3张图片

 

完成设置后生成的项目的文件组织结构如下图。

自定义Qt Designer插件_第4张图片

 

  • untitled.pro是插件项目的项目文件,用于实现插件接口
  • qwbatteryplugin.h和qwbatteryplugin.cpp是插件的头文件和实现文件
  • icons.qrc是插件项目的资源文件
  • qwbattery.pri是包含在untitled.pro项目中的一个项目文件,用于管理自定义组建类。

 

插件项目各文件的功能实现

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 Designer插件_第5张图片

要让插件在Qt creator的UI设计器里正常显示,编译插件项目的编译器必须与编译Qt Creator的编译器一致。

debug和release模式要相对应,debug模式生成的lib和dll文件名后面会自动增加一个字母“d“

你可能感兴趣的:(Qt)