本文共 2120 字,大约阅读时间需要 7 分钟。
创建自定义插件 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将可以看到两个自定义插件;转载地址:http://eudai.baihongyu.com/