2016-08-15 1 views
0

は、私は、ツールバーとQMLアプリケーションを持っていると言いますそのコンポーネントにカスタムプロパティ値(上記のshowAdminButtonsなど)を指定する場合は、setSource()メソッドを使用する必要があります。ロードコンポーネントは

ApplicationWindow { 
    header: Loader { 
    Component.onCompleted: { 
     var qml = Qt.platform.os=="linux" ? "qrc:/linux/MyTools.qml" : "qrc:/MyTools.qml"; 
     setSource(qml, {showAdminButtons:userIsAdmin()}); 
    } 
    } 
} 

ローダーにプロパティを提供するための「QML専用」の方法はありますか?Component.onCompletedは不要ですか? (Component.onCompletedは、私にはグロスハックの回避策を感じる理由は完全には正当化できませんが、使用するたびにQMLの宣言的性質とJSの手続き的性質が関係しています)

+0

Bindingタイプを使用//stackoverflow.com/a/27704424/405017)ソルの種類私の質問に賛成です。ただし、コンポーネントのシグネチャからプロパティを削除し、インスタンス化で値を渡す必要があるように定義する場合にのみ機能するように見えます。プロパティエイリアスとデフォルト値が機能しないようにします。 – Phrogz

+1

「ファイルセレクタ」と呼ばれる手法は、Loader + Qt.platform.osよりも優れています。http://www.ics.com/blog/mastering-qt-file-selectors – jpnurmi

答えて

2

方法1:(結合が必要ではない場合や、単純な代入)Loader.onLoaded結合:

ApplicationWindow { 
    header: Loader { 
     source: Qt.platform.os=="linux" ? "qrc:/linux/MyTools.qml" : "qrc:/MyTools.qml" 
     onLoaded: { 
      item.showAdminButtons = Qt.binding(function() { return userIsAdmin(); } 
     } 
    } 
} 

方法2:私は、[この回答](HTTPを発見した

ApplicationWindow { 
    header: Loader { 
     id: loader 
     source: Qt.platform.os=="linux" ? "qrc:/linux/MyTools.qml" : "qrc:/MyTools.qml" 
     Binding { 
      target: loader.item 
      property: "showAdminButtons" 
      value: userIsAdmin() 
     } 
    } 
} 
関連する問題