【转自】http://topic.csdn.net/u/20111009/17/44c65c25-1039-4715-90a5-6e798ebf284c.html
在创建插件以前,我们需要首先定义一个接口,用于程序和插件之间的交互:
-
C/C++ code
-
class MyInterface{public:virtual ~ MyInterface() {}virtual QString getString() = 0 ;}; // 将MyInterface和"me.xzis.MyInterface/1.0"这一唯一标识符绑定// 注意该操作不能在任何namespace内完成QT_BEGIN_NAMESPACEQ_DECLARE_INTERFACE(MyInterface, "Mystring");QT_END_NAMESPACE
然后我们实现一个简单的插件:
-
C/C++ code
-
// myplugin.hclass MyPlugin : public QObject, public MyInterface{ Q_OBJECT// 将该接口注册到Qt的meta-object systemQ_INTERFACES(MyInterface) public :MyPlugin(void);~MyPlugin(void);virtual QString getString();}; // myplugin.cppQString MyPlugin::getString(){return " Qt Plugins " ;} // 导出该插件// 注意.pro中的TARGET必须是"myPlugin"
Q_EXPORT_PLUGIN2(myPlugin, MyPlugin);
QT_END_NAMESPACE
在插件的testMyPlugin的main()中:
-
int main(int argc, char *argv[])
{
QApplication a(argc, argv); QPluginLoader loader("myPlugin.dll");
// 该函数会自动加载插件
// 注意加载插件的耗时较长
QObject *instance = loader.instance();
if (instance) {
// 必须使用qobject_cast做类型转换
MyInterface *interface = qobject_cast<MyInterface *>(instance);
qDebug() << interface->getString();
} return a.exec();
}
【源码】:http://download.csdn.net/detail/addfourliu/3766553