저는 여러 플러그인이 포함될 C++/Qt 프로그램을 개발 중입니다. 각 클래스에 대한 나는 다음과 같습니다 플러그인 인터페이스를 정의 할 필요가 그래서Q_OBJECT가 포함 된 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)
: 나는 매크로 (나는 C++ 전처리 전문가가 아니에요 이후 실제로 2)을 생성
//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";}
};
그 난 그냥 추가해야합니다 (
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";} };
그것은 (가독성 미안하지만 난 .. 줄 바꿈을 추가하는 방법을 잘 모릅니다) 확인을보고 복사/내 코드에서 위의 라인을 붙여 넣기 만하면 작동 ...
내가 컴파일 내 프로젝트에서 오류가 발생합니다. moc
:
Error: Class declaration lacks Q_OBJECT macro.
누구나 아이디어가 있습니까?
myPlug 란 무엇입니까? – Silicomancer
이 플러그인 인터페이스인데, 하나의 thah는'instantiate'를 정의하고'Q_DECLARE_INTERFACE (myPlug, "org.myapp.plug")' – bibi