2012-05-08 16 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ファイル:コンパイル時

QT_BEGIN_NAMESPACE 
Q_EXPORT_PLUGIN2(blanktarget, blankdictionary) 
QT_END_NAMESPACE 

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

私が持っている私のblankdictionary.cppファイルの終わりにこのエラーを返します。

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