2012-05-08 78 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