这个问题是关于QtQuick 1.1,qml,GUI创建
所以我创建了一个包含3个项目的组件(图像或矩形等),因为这可以在我的应用程序的许多屏幕中重复使用。
在一个特定的屏幕中,只需要2个项目。
所以如何在导入组件后删除那一项。
以下代码仅用于理解概念
我的组件就像
//Mycomponent.qml
Rectangle {
*code*
item { id: item1; *some code* }
item { id: item2; *some code* }
item { id: item3; *some code* }}
我的屏幕文件将是
//MyScreen.qml
Rectangle {
MyComponent{ }
*some Code*
}
那么如何重用同一个组件并从中只删除一个项目呢?
如果我的问题不对,请纠正我。
谢谢!
答案 0 :(得分:3)
在大多数情况下,您只需更改对象的可见性。
visible: false
或
opacity: 0
例如,您可以为其添加别名属性。
//Mycomponent.qml
Rectangle {
id: myRect
property alias item1Visible: item1.visible
Item { id: item1; }
Item { id: item2; }
Item { id: item3; }}
然后你可以做
myRect.item1Visible = false
在js。
您可以删除dynamicaly created个对象。
rect.destroy();
虽然你可以删除静态创建的对象,但这不是一个好主意。
答案 1 :(得分:2)
我建议将您的单个项目进一步划分为更小的组件,并在其上构建更大的组件。可能会在未来的组件中为您提供更好的可重用性,因为您可以根据需要使用较小的组件进行组合。类似的东西:
//MyReusableOne.qml
Item {
*code*
}
//MyReusableTwo.qml
Item {
*code*
}
//MyReusableThree.qml
Item {
*code*
}
//MyBiggerBlockOne.qml
Rectangle {
MyReusableOne{ id: item1; }
MyReusableThree{ id: item2; }
}
//MyBiggerBlockTwo.qml
Rectangle {
MyReusableTwo{ id: item3; }
MyReusableThree{ id: item4; }
}
然后将它们用作:
//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
}
}
P.S。代码仅用于描述,不检查语法错误。希望你明白这一点。