2

カスタムタイプのプロパティがあります。

class foo : public QObject {
    Q_OBJECT
    Q_PROPERTY(Custom x READ x WRITE set_x)

public: 
    void set_x(Custom &x) { /*whatnot*/}
}

QJson は、次の動的割り当てを効果的に呼び出します。

((QObject*)&foo_instance)->setProperty("x", QVariant(QString("something-from-json")))

Qt に記載されているように、false を返します。

値がプロパティの型と互換性がない場合、プロパティは変更されず、false が返されます。

これをカスタム値に組み込むにはどうすればよいですか? プロパティシステムはこのアクセサーを認識しないため、副次機能を明確に定義するvoid set_x(QString)か、機能しvoid set_x(QVariant)ない可能性があります。

また、型の互換性はどこでチェックされますか? - プログラム制御が届かない

int foo::qt_metacall(QMetaObject::Call _c, int _id, void **_a)

メタオブジェクト コンパイラによって生成される関数。

Customこれらのタイプと互換性 を持たせるにはどうすればよいですか?

4

1 に答える 1

2

The Property Systemを読むと役立ちます

特にプロパティとカスタム型の部分。

簡単に言うと、すべてのプロパティは QVariant として保存されます。Q_DECLARE_METATYPEマクロを
使用して、カスタムタイプを Qt プロパティと互換性を持たせる必要があります。 その後、qRegisterMetaType関数を呼び出してタイプを登録する必要があります。

于 2012-09-23T19:55:58.517 に答える