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

Другая проблема (как и вы упомянули в своем комментарии) состоит в том, что вы объявили макрос Q_OBJECT в классе blankdictionary, но затем не получили его от QObject.

+0

Да, blankdictionary должен быть реализацией QObject в этом случае или у меня есть, как вы уже упоминали, для удаления макроса Q_OBJECT. Теперь это работает! Благодаря ! – ocds

Смежные вопросы