4

C++クラスをQtWebkitのJavascriptオブジェクトにマップするQtアプリを書いています。まず、私がやろうとしていることを説明しましょう。

QObjectから継承されたクラスがあります。

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

pulbic slots:
    void getData();
}

そして別のクラスで、myobjインスタンスをQVariantMapに追加しようとしました。

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

これについて何か考えはありますか?

4

2 に答える 2

3

コンパイラが言ったように、 as パラメータQVariantを取るコンストラクタは存在しません。代わりに関数myobjを使用しようとしましたか?qVariantFromValue

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

于 2010-11-29T13:19:12.370 に答える
2

カスタム タイプを Q_DECLARE_METATYPE(myobj) で登録する場合、クラスにはパブリック デフォルト コンストラクター (ok)、パブリック デストラクタ (ok)、およびパブリック コピー コンストラクター (エラー メッセージが示す MISSING) が必要です。ドキュメントを参照してください。

于 2010-11-29T14:06:20.053 に答える