2017-03-16 4 views
-1

Qt 5.7.0とQMLに問題があります。私は実行時にいくつかのオブジェクトのプロパティを発見する必要があります。Qt/QMLがgetOwnPropertyDescriptorを動作させることができません

目的は、他の場所にある純粋なQMLツリービューを使用することです。これはハードコーディングされたプロパティで構築され、表示する値を保持します。非常にシンプルなツリービューで、必要なものです。コントロール2.0を使用する私は "在庫" TreeViewがありません。

私の目標は、純粋なQML TreeViewを変更して、オブジェクトツリーとハードコードされた名前の代わりにproprtyの名前を与えることです。

軽量コンポーネントを使用するために完全なQtモデルを使用したくありません。

この目標を残しておけば、実行時に名前を知るだけでプロパティ値を動的に求めなければならないことがあります。例えば、C#とJavaでは、リフレクションを使用して簡単に行うことができます。

C#の世界から来て、私は同じコンセプトを探しています。私のユースケースでは、オブジェクトは純粋なQMLオブジェクトではなく、qmlRegisterTypeによって公開されるC++オブジェクトです。

私はObject.getOwnPropertyDescriptorを使用する予定が、私は私が欲しいとそれが動作することはできません、テストの時間後に...ここで

import QtQuick 2.0 

Item { 

    id: myTest 

    property int myProp : 1234 


    function test() { 
     console.log("_________________TEST_________________"); 
     console.log(Object.getOwnPropertyNames(myTest)) 
     console.log(myTest.hasOwnProperty("myProp")) 
     console.log(Object.getOwnPropertyDescriptor(myTest, "myProp")); 
     console.log("_________________TEST_________________"); 
    } 
} 
純粋QML/JSでPOCです私が手ログで

​​

ライン「QML:真」による「hasOwnPropertyを( 『MyPropで』)」プロパティを見つけて、「真」と言います。

しかし、プロパティディスクリプタを取得しようとする次の行は "undefined"を返します。

私の問題を解決できる人は私のヒーローです!

+0

プロパティは 'readonly'として定義されていませんか?簡単なスニペット、 'TreeView'の構造を想像する必要があります。 'hardcoded'が' readonly'でない限り(C++では:setterはありません)、実行可能でなければなりません。 – derM

答えて

0

プロパティデスクリプタを取得する場合は、前もって設定する必要があります。

Item { 
    id: myTest 
    property int myProp : 1234 

    function test() { 
     console.log("_________________TEST_________________"); 
     console.log(Object.getOwnPropertyNames(myTest)) 
     console.log(myTest.hasOwnProperty("myProp")) 
     console.log(Object.getOwnPropertyDescriptor(myTest, "myProp")); 
     console.log(Object.getOwnPropertyDescriptor(myTest, "myProp").value) 
     console.log(myProp) 
     console.log("_________________TEST_________________"); 
    } 

    Component.onCompleted: { 
     Object.defineProperty(myTest, 'myProp', 
           { 
            enumerable: false, 
            configurable: false, 
            writable: false, 
            value: '50' 
           }) 
     test() 
    } 
} 

しかし、IMHOはまったく役に立たない。だから、多分それはあなたのこの質問はnoobのように感じる可能性が最も高いものをinfamous XY-Questions

+0

私はプロパティ定義がすでに記述子を作成していると思います。 –

+0

私はJSFiddleでテストを行いました。したがって、純粋なJavascriptでテストしました。私が推測したように動作しています。それは、QML/JSはそのようなプロパティまたは何かを定義していないようです。 –

0

の一つであるとして、あなたの最終目標に展開する良いでしょう...私はこのmyobjと名前でプロパティを照会することができます発見し、[プロパティ名]構文です。

あまりにも見やすい...

関連する問題