2012-05-08 94 views
1

我有一個嚴重的QtPlugin問題。我試圖從一個接口,一個名爲詞典編寫一個插件: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 

我已經在blankdictionary項目實施的字典中聲明如下(blankdictionary.h)一blankdictionary類。

的.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類中聲明瞭Q_OBJECT宏,但不是從QObject派生它。

+0

是的,在這種情況下,blankdictionary必須是QObject的實現,否則,正如你所提到的那樣,我刪除了Q_OBJECT宏。現在它工作了!謝謝 ! – ocds