他のオブジェクトのラッパーのように機能するQMLオブジェクトを作成しようとしています。これが私のQMLファイル(Container.qml)です。
Item {
property string label
property Item control
Row {
Label {
text: label
}
// Not sure how to display the control assigned to the control property
}
}
(このコンポーネントを使用する私のQMLで)私がやりたいことは次のようなものです:
Container {
label: "My Label"
control: Textbox {
text: "My Value"
}
}
そのQMLが供給されると、結果(インターフェース内)は、このQMLからの出力に似たものになるはずです。
Item {
Row {
Label {
text: "My Label"
}
Textbox {
text: "My Value"
}
}
}
これは可能ですか?これを行おうとすると、コントロールプロパティに項目を割り当てるときに「プロパティにオブジェクトを割り当てられません」というメッセージが表示されます。私はQtフォーラムを検索し、これを容赦なくグーグル化しましたが、成功しませんでした。誰かが答えを知っていれば、それは非常に高く評価されます。
ありがとう
ジャック
Loader 要素を使用してアイテムを動的にロードし、「control」プロパティを alias に設定して、ローダーのsourceComponentプロパティ。
したがって、Container.qmlは次のようになります。
Item {
property string label
property alias control : loader.sourceComponent
width: 200; height: 200
Row {
Label { text: label }
Loader { id: loader }
}
}
これで、グラフィックアイテムを 'control'プロパティに割り当てると、ローダーによって自動的に表示されます。
より良い解決策があります:
/* MyObject.qml */
Rectangle {
default property alias data /* name can be any */ : inner_space.data
/* ... You can put other elements here ... */
Item {
id: inner_space
/* ... Params ... */
}
/* ... You can put other elements here ... */
}
そして今、私たちは望むすべてを行うことができます!
/* main.qml */
Rectangle {
MyObject {
Button {
/* ... */
}
}
}
ユーザーに感謝 bobbalubadata
ではなくchildren
プロパティの使用を提案してくれた。
カスタムプロパティを使用して、他のアイテムのコンテナを作成できます。
Item
{
id: root
property list<Item> rectList: [
Rectangle
{
parent: root
},
Rectangle
{
parent: root
},
Rectangle
{
parent: root
},
Rectangle
{
parent: root
}
]
}
四角形項目の親は手動で設定されるため、それらはコンテナの視覚的な子になります。
あなたはそれらをjavascript配列として評価することができます
for ( var i = 0; i < root.rectList.length; i++ )
{
var rect = root.rectList[i];
rect.visible = true;
}
または
rect.rectList[1].visible = false;
約1か月間QMLを使用していますが、実際にこれを行う方法はわかりません。
最善の計画は、コントロール(例ではTextbox
)で可能なすべてのことを把握し、行に各コンポーネントのインスタンスを作成して、Item
に対応する状態を設定することです。次に、状態は、必要に応じて目的のコンポーネントを表示または非表示にする処理を行います。
編集
ただ考えました。 (これを試したことはありませんが、試してみてください!)Item
の_Component.onCompleted:
_ハンドラで、control.createObject(rowID)
を呼び出してみてください。ここで、rowID
はid
_Row
オブジェクト(control
の親にしたいオブジェクト)。