自定义插件

自定义插件

创建自定义插件

1.         创建工程

 

  QT4 Designer PlugIn

  后续配置都使用默认值,这里我们创建一个QHist插件。

 

2.         新建后,直接编译,会产生如下错误

1>LINK : fatal error LNK1181: cannot open input file 'QtDesignerd.lib'

这是因为此工程默认引用的是QtDesignerd.lib库,更改其为版本对应的库即可消除故障,我这里使用的是

QtDesignerd4.libRelease版本使用QtDesigner4.lib)。

 

3.         修改文件,增加声明,如下:

修改前:

#include

 

class QHist : public QWidget

修改后

#include

#include

 

class QDESIGNER_WIDGET_EXPORT QHist : public QWidget

 

如果不执行此操作,后续应用程序连接时,会上报链接错误:

error LNK2019:

 

4.         实现插件,这里我只是在此控件中绘制了一条直线。

重载paintEvent事件

protected:

void paintEvent(QPaintEvent *event);

    

     void QHist::paintEvent(QPaintEvent *event)

{

    QPainter painter(this);

 

    painter.drawLine(0, 0, 10, 10);

}

这时,编译会报错误,原因是qhist.cpp中还缺少头文件,引入即可消除:

#include

 

5.         编译Release版本

6.         到此我们就完成了插件的创建;

 

 

使用自定义插件(QT Designer

1.         将编译生成的相关文件拷贝到QTplugins/designer目录;

 

2.         qhist.h文件拷贝到QT所在的include/QtGui目录;

 

到此,打开QT Designer,即可看到新增的QHist插件了;

 

 

 

使用自定义插件(APP

1.         将编译生成的相关文件拷贝到用用工程所在的工程目录;

 

 

 

到此,编译应用程序,运行即可正常使用自定义的插件了;

 

 

 

 

创建多个插件到一个插件库

前面介绍的是生成单个自定义插件,QT还支持将多个自定义插件生成到一个插件库中,如下:

1.         创建一个插件库工程,工程名为MyCustomWidgets

2.         创建新的类,分别是QHistQHistPluginQScatterQScatterPlugin,相关实现代码参见上述单个插件的实现,和先前的唯一差别就是:源文件末尾不在需要添加Q_EXPORT_PLUGIN2声明;

3.         修改MyCustomWidgets的定义和实现,如下:

// 头文件

#include

#include

 

#include "qhistplugin.h"

#include "qscatterplugin.h"

 

class MyCustomWidgets: public QObject, public QDesignerCustomWidgetCollectionInterface

{

    Q_OBJECT

    Q_INTERFACES(QDesignerCustomWidgetCollectionInterface)

 

public:

    MyCustomWidgets(QObject *parent = 0);

 

    virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const;

 

private:

    QList<QDesignerCustomWidgetInterface*> widgets;

};

 

// 源文件

#include "mycustomwidgets.h"

 

MyCustomWidgets::MyCustomWidgets(QObject *parent)

: QObject(parent)

{

    widgets.append(new QHistPlugin(this));

    widgets.append(new QScatterPlugin(this));

}

 

QList<QDesignerCustomWidgetInterface*> MyCustomWidgets::customWidgets() const

{

    return widgets;

}

 

Q_EXPORT_PLUGIN(MyCustomWidgets)

里从QDesignerCustomWidgetCollectionInterface派生了一个子类MyCustomWidgets

4.         编译Release版本,将此库文件拷贝到Designer相关目录,此时新打开Qt Designer将可以看到两个自定义插件;

你可能感兴趣的:(QT)