博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义插件
阅读量:4170 次
发布时间:2019-05-26

本文共 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/

你可能感兴趣的文章
Java面试分享(题目+答案)
查看>>
AOP如何实现及其原理
查看>>
AOP 那点事儿
查看>>
AOP 那点事儿 ( 续集 )
查看>>
(一)线程的发展历史
查看>>
(二)线程的应用及挑战
查看>>
(四)Thread.join的作用和原理
查看>>
(五)Synchronized原理分析
查看>>
基于redis分布式锁实现“秒杀”
查看>>
分布式理论:深入浅出Paxos算法
查看>>
Java高级架构2018年好文清单
查看>>
【jvm】Java垃圾回收
查看>>
Spring 面试问题 TOP 50
查看>>
拼多多Java后端团队面试题:epoll+集群+事务隔离+Kafka+分布式等
查看>>
最全BAT算法面试130题:阿里、百度、腾讯、京东、美团、今日头条
查看>>
想进阿里P7,你必须掌握这些技能专题
查看>>
看完你还敢说你懂JVM吗?
查看>>
面试了一个2年程序员,竟然只会curd,网友神回复!
查看>>
ElasticSearch基础分布式架构讲解
查看>>
年底了,程序员来说说你今年写过的最牛逼的bug是什么?
查看>>