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
本文探讨了在Qt中使用QObject派生类作为插件接口的可能性,并通过实例验证其可行性。文章提供了具体的代码实现,展示了信号与槽的工作均能正常运行。
4595

被折叠的 条评论
为什么被折叠?



