我正在開發一個有多個插件的C++/Qt程序。 對於每個類我必須定義一個插件的界面,它看起來像這樣:包含Q_OBJECT的C++宏
//my class
class qwerty;
//my interface
class qwertyPlug : public QObject, myPlug {
Q_OBJECT
Q_INTERFACES(nPanPlug)
Q_PLUGIN_METADATA(IID "org.myapp.plug")
public:
qwertyPlug() {qRegisterMetaType<qwerty *>("qwerty""*");}
QByteArray name() {return "qwerty";}
};
我創建了一個宏(實際上是2,因爲我不是一個C++預處理器大師):
#define MY_PLUGIN_BASE(__c_name,__appendix) \
class __c_name##__appendix : public QObject, myPlug { \
Q_OBJECT \
Q_INTERFACES(nPanPlug) \
Q_PLUGIN_METADATA(IID "org.myapp.plug") \
public: \
__c_name##__appendix() {qRegisterMetaType<__c_name *>(#__c_name"*");} \
QByteArray name() {return #__c_name;} \
};
#define MY_PLUGIN(__c_name) MY_PLUGIN_BASE(__c_name,Plug)
所以在我的代碼(其中qwerty
定義),我只需要添加:
MY_PLUGIN(qwerty)
這將擴大(的g++ -E
輸出):
class qwertyPlug : public QObject, myPlug { Q_OBJECT Q_INTERFACES(nPanPlug) Q_PLUGIN_METADATA(IID "org.myapp.plug") public: qwertyPlug() {qRegisterMetaType<qwerty *>("qwerty""*");} QByteArray name() {return "qwerty";} };
,它看起來OK(遺憾的可讀性,但我不知道如何添加新行。)如果複製/粘貼上面的線在我的代碼,但工程...
當我編譯我的項目我得到的錯誤從moc
:
Error: Class declaration lacks Q_OBJECT macro.
有沒有人有想法?
什麼是myPlug? – Silicomancer
這是插件接口,其中一個thah定義了'instantiate'並具有'Q_DECLARE_INTERFACE(myPlug,「org.myapp.plug」)' – bibi