自定义插件

    技术2022-05-19  20

    自定义插件

    创建自定义插件

    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 <QtGui/QWidget>

     

    class QHist : public QWidget

    修改后

    #include <QtGui/QWidget>

    #include <QtDesigner/QDesignerExportWidget>

     

    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 <QtGui>

     

    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 <QtDesigner/QtDesigner>

    #include <QtCore/qplugin.h>

     

    #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将可以看到两个自定义插件;


    最新回复(0)