我會建議進一步將您的單個項目分成更小的組件,並在其上構建更大的組件。在未來的組件中,可能會給您更好的可重用性,因爲您可以根據需要組合更小的組件。喜歡的東西:
//MyReusableOne.qml
Item {
*code*
}
//MyReusableTwo.qml
Item {
*code*
}
//MyReusableThree.qml
Item {
*code*
}
//MyBiggerBlockOne.qml
Rectangle {
MyReusableOne{ id: item1; }
MyReusableThree{ id: item2; }
}
,然後用它們爲:
//MyScreen.qml
Rectangle {
MyBiggerBlockOne{ }
*some Code*
MyBiggerBlockTwo{ }
*some Code*
}
如果你堅持你所描述的方式,一個蹩腳的方式可能是:
Item
{
property var inValidItems : ['item2']
Component
{
id: item1
Rectangle { color: "red"; width: 100; height: 100 }
}
Component
{
id: item2
Rectangle { color: "green"; width: 100; height: 100 }
}
Component
{
id: item3
Rectangle { color: "yellow"; width: 100; height: 100 }
}
Loader { id: loader1; sourceComponent: item1; y : 0 }
Loader { id: loader2; sourceComponent: item2; y : 100}
Loader { id: loader3; sourceComponent: item3; y : 200}
Component.onCompleted:
{
if(inValidItems.indexOf('item1') >= 0)
loader1.sourceComponent = undefined
if(inValidItems.indexOf('item2') >= 0)
loader2.sourceComponent = undefined
if(inValidItems.indexOf('item3') >= 0)
loader3.sourceComponent = undefined
}
}
附:代碼僅用於描述,不檢查語法錯誤。希望你明白這個主意。
可能你只是想設置'item.visible = false'?只需將布爾屬性別名添加到組件並將其鏈接到項目的一個可見屬性 – folibis