4

QVectorQML/Javascript 内で使用するにはどうすればよいですか? 例:

C++:

QMLで使用するカスタムクラス。QVectorクラスには、登録されたものを返す関数が含まれていますElementType

class CustomType : public QObject
{
    Q_OBJECT

    public:
        Q_INVOKABLE QVector<ElementType*> getElements(); 
    //.....            
}
//.........
qmlRegisterType<CustomType>("CustomComponents", 1, 0, "CustomType");
qmlRegisterType<ElementType>("CustomComponents", 1, 0, "ElementType");
qRegisterMetaType<ElementType*>("ElementType*");

QML:

QML コードはクラス (カスタム) のインスタンスを受け取り、要素のCustomType取得を試み、そのプロパティを読み取ります。QVector<ElementType*>しかし、QML はQVector型を認識できません。

//.......
function(){
    var elements = custom.getElements()
    elements[0].property   //?
}
4

3 に答える 3

1

QML アクセス可能なリスト プロパティは、 で構築する必要がありますQDeclarativeListProperty。これは、ベクトルを含むリスト形式のものすべてに適用されます。Qt ドキュメントのこの部分に詳細があります。

于 2012-07-30T13:57:15.943 に答える
0

あなたの例QListQObject*は、Q_INVOKABLE関数から戻る必要があります。その方法で返されたすべてのオブジェクトはJavaScriptの所有権を持ち、JavaScript関数が戻ったときにガベージコレクションされることに注意してください。この動作を防ぐには、オブジェクトをコレクションにプッシュする前にsetObjectOwnershipを使用します。QListQMLでのコレクションの使用の詳細については、QMLデータモデルを参照してください。

于 2012-08-01T15:01:24.077 に答える