2012-05-08 4 views
1

QtPlugin에 심각한 문제가 있습니다. 나는 사전라는 인터페이스에서 플러그인을 구축하려고 : 나는 blankdictionary 프로젝트에서이 (blankdictionary.h)처럼 선언 blankdictionary 클래스에서 사전을 구현 한QT 플러그인 컴파일 문제

class dictionary 
{ 
private: 
    ... some private members 
public: 
    ~dictionary(); 

    ... some no virtual methods 

    virtual void collectData()=0; 
    virtual void collectOperator()=0; 
    virtual void collectControl()=0; 
}; 

QT_BEGIN_NAMESPACE 
Q_DECLARE_INTERFACE(CDictionnary, "shinoe.cameleon.dictionary/2.0") 
QT_END_NAMESPACE 

.

.PRO 파일 :

!include(../../../configuration.pri) 

QT  += core gui 

TARGET = blanktarget 
TEMPLATE = lib 
CONFIG += plugin 

#dictionary interface includes 
!include(../../../machine/kernel/includekernel.pri) 

SOURCES += blankdictionary.cpp 
HEADERS += blankdictionary.h 

blankdictionary.h 파일 :

class blankdictionary : public dictionary { 
    Q_OBJECT 
    Q_INTERFACES(dictionary) 
public: 
    blankdictionary(); 
    void collectData(); 
    void collectOperator(); 
    void collectControl(); 
}; 

내 blankdictionary.cpp 파일의 끝에 내가있다 :

QT_BEGIN_NAMESPACE 
Q_EXPORT_PLUGIN2(blanktarget, blankdictionary) 
QT_END_NAMESPACE 

컴파일에서 이 오류를 반환합니다.

blankdictionary.cpp: In function 'QObject* qt_plugin_instance()': 
blankdictionary.cpp:20: error: no match for 'operator=' in '_instance = (operator new(44u), (<statement>, ((blankdictionary*)<anonymous>)))' 
c:\QtSDK\Desktop\Qt\4.7.4\mingw\include/QtCore/qpointer.h:65: note: candidates are: QPointer<T>& QPointer<T>::operator=(const QPointer<T>&) [with T = QObject] 
c:\QtSDK\Desktop\Qt\4.7.4\mingw\include/QtCore/qpointer.h:67: note:     QPointer<T>& QPointer<T>::operator=(T*) [with T = QObject] 

어떤 아이디어가 있습니까?

미리 감사드립니다.

+0

나는 문제는 여기에서 온다 생각 : "[...] 플러그인을 통해 응용 프로그램의 확장은 다음과 같은 단계를 포함 만들기 : 는 인터페이스의 집합을 정의를 (순수한 가상 함수와 클래스) 플러그인 얘기하는 데 사용 . [...] " 출처 : http://doc.qt.nokia.com/4.7-snapshot/plugins-howto.html. 그래서 전 순수 가상 함수 만 사용하여 사전 인터페이스 클래스를 만들어야한다고 생각합니다. 지금 사용해보세요. – ocds

답변

2

또 다른 문제는 (사용자 의견에서 언급 한 것과 마찬가지로) 매크로를 blankdictionary 클래스에 선언했지만 QObject에서 파생되지 않은 것입니다.

+0

예, blankdictionary는이 경우 QObject의 구현이어야하며, 언급 한대로 Q_OBJECT 매크로를 제거해야합니다. 이제 작동합니다! 감사 ! – ocds