Qt例子中,插件接口用的是普通的C++类(非QObject派生类),那么能否使用QObject派生类作为插件接口呢。在尝试之前,先google一下,找到到Qt邮件列表中的两个thread,只有一个回复中提到了可以直接用,但却没有得到其他人的附和。
算了,还是自己来试试吧。
结果,运行正常。
代码
- mathinterface.h
#ifndef MATHINTERFACE_H #define MATHINTERFACE_H #include <QtCore/QObject> #include <QtCore/QtPlugin> class MathInterface:public QObject { Q_OBJECT public: virtual ~MathInterface() {} signals: void sig2(int val); public slots: virtual void setValue(int val) = 0; }; Q_DECLARE_INTERFACE(MathInterface, "com.example.Plugin.MathInterface/0.1"); #endif
- plugin1.h
#ifndef PLUGIN1_H #define PLUGIN1_H #include <QtCore/QObject> #include "mathinterface.h" class Plugin1:public MathInterface { Q_OBJECT Q_INTERFACES(MathInterface) public: Plugin1(QObject *parent=NULL); void setValue(int val); }; #endif // PLUGIN1_H
- plugin1.cpp
#include "plugin1.h" Plugin1::Plugin1(QObject *parent) { } void Plugin1::setValue(int val) { emit sig2(val); } Q_EXPORT_PLUGIN2(plugin1, Plugin1);
信号与槽工作均正常。
参考
-
http://doc.qt.nokia.com/4.7/plugins-howto.html#the-lower-level-api-extending-qt-applications
-
http://lists.trolltech.com/qt-interest/2006-11/thread00745-0.html
-
http://lists.qt.nokia.com/pipermail/qt-interest/2010-October/028135.html
FROM: http://blog.csdn.net/dbzhang800/article/details/6616660