2010-11-29 11 views
4

私はC++クラスをQtWebkitのJavascriptオブジェクトにマップするQtアプリケーションを作成しています。まず、私がやろうとしていますかを説明しましょう:Qtプログラミング:QVariantMapでカスタムデータ型を使用するには?

私はQObjectを継承したクラスがあります。

class myobj : public QObject { 
    Q_OBJECT 
public: 
    myobj(); 
    ~myobj(); 

pulbic slots: 
    void getData(); 
} 

を、別のクラスで、私はQVariantMapにこのmyobjインスタンスを追加しようとしました:

QVariantMap anotherClass::getObj() { 
    myobj* obj1 = new myobj(); 
    myobj* obj2 = new myobj(); 

    QVariantMap items; 

    items.insert(QString("0"), QVariant(*obj1)); 
    items.insert(QString("1"), QVariant(*obj2)); 

    return items; 
} 

そして、私は次のエラーを受け取りました:

error: no matching function for call to ‘QVariant::QVariant(myobj&)’ 

私は宣言を追加しようとしました:

Q_DECLARE_METATYPE(myobj); 

しかし、私が得た:

error: ‘QObject::QObject(const QObject&)’ is private 

このことについて任意のアイデア?コンパイラのよう

答えて

3

QVariantのコンストラクタは、そのパラメータとしてmyobjを取る存在しない、と述べました。代わりにqVariantFromValue関数を使用しようとしましたか?

私はこれがあなたが探しているものだと思います。

+0

また、私はこの試みた:(http://stackoverflow.com/questions/956335/subclass-of-qobject-qregistermetatype-and-the-private-copy-constructor をが、ここで説明しているように、まだ –

+1

を動作しませんでしたseemd http://doc.trolltech.com/4.7/qmetatype.html#Q_DECLARE_METATYPE)では、パブリックのデフォルトコンストラクタ、パブリックコピーコンストラクタ、パブリックデストラクタを宣言する必要があります。コピーコンストラクタはありません。そこで、コンパイラはプライベート –

+2

QObjectsとして宣言されたマザークラス(QObject)の1つを使用しようとします。また、QObjectsはコピーされるはずのバリアントとして、QVariantはうまくいっていません。 –

2

Q_DECLARE_METATYPE(myobj)でカスタムタイプを登録する場合、クラスにはパブリックデフォルトコンストラクタ(ok)、パブリックデストラクター(ok)、およびパブリックコピーコンストラクタ(エラーメッセージに表示されるMISSING)が必要です。 documentation

関連する問題