前言:作者在学习Qt开发中,发现很少讲解用向导创建Qt应用程序插件的文章,就把自己的心得写出来,以求抛砖引玉。
一、作者用vs 2010 + Qt 4.8.1在XP下开发Qt应用程序插件。首先明白一个概念,qt插件是共享库(动态链接库 、qt library)的一种;
二、利用向导创建插件:选择Qt Designer Plugin, 本例其它全选择向导默认选项,生成QtPluginTest插件程序。
1、由于向导生成的是Qt Desiner 的插件,不是我们自己的应用程序插件,所以要重新定义插件接口:为工程新建 TestPluginInterface.h文件, 内容如下:
/
// TestPluginInterface.h
#ifndef QTTESTINTERFACE_H
#define QTTESTINTERFACE_H
class QString;
class QtTestInterface
{
public:
~QtTestInterface() { }
virtual QString ShowInfo() = 0;
};
Q_DECLARE_INTERFACE(QtTestInterface, "bai")
#endif
/
2、为类QtPluginTestPlugin添加虚函数 QString ShowInfo(); 简单地返回一个字符串”bai Plugin“.
3、修改qtplugintestplugin.h 文件:注释掉 #include <QDesignerCustomWidgetInterface>这一行文件包含,在其下面添加两行#include <QIcon>
#include ”TestDllInterface.h“;将类QDesignerCustomWidgetInterface 改为我们自己在TestDllInterface.h文件中定义的接口类QtTestInterface;
到此, 应用Qt程序插件已经创建完了,主要实现了ShowInfo() 接口返回 一个字符串信息,下面要测试此插件是否正确.
三、测试:利用Qt向导创建Qt 应用程序HelloQt,将插件接口类头文件TestPluginInterface.h、插件共享库QtPluginTest.dll放到应用程序目录下, 修改HelloQt的main函数如下:
#include "TestPluginInterface.h" // 新增加的
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPluginLoader loader("QtPluginTest.dll");
QObject *instance = loader.instance();
QString str;
if (instance)
{
// 必须使用qobject_cast做类型转换
QtTestInterface *interface = qobject_cast<QtTestInterface *>(instance);
str = interface->ShowInfo(); // str 变量接收ShowInfo传递的信息。
}
return a.exec();
}
四、插件原代码可到我上传的资源页http://download.csdn.net/detail/qusuo/5460253下载。
ps:1、关于原代码,有人说打开很多错误的问题,vs2010 毕竟不是Qt公司的开发工具,在处理Qt程序时会有些错误提示,第一次打开编译一下,是可以通过的,但有可能有些提示错误,关闭工程,重新打开就可以了,不是程序的错误!前提是你要安装Qt sdk!