`

自定义插件

    博客分类:
  • Qt
 
阅读更多
创建自定义插件

1.         创建工程



  QT4 Designer PlugIn

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



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

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

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

QtDesignerd4.lib(Release版本使用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.         将编译生成的相关文件拷贝到QT的plugins/designer目录;



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



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







使用自定义插件(APP)

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







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









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

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

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

2.         创建新的类,分别是QHist,QHistPlugin,QScatter,QScatterPlugin,相关实现代码参见上述单个插件的实现,和先前的唯一差别就是:源文件末尾不在需要添加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将可以看到两个自定义插件;

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics