如何在QtQuick 1.1中加载组件后删除项目

时间:2016-09-27 02:46:41

标签: qt user-interface qml qt-quick

这个问题是关于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*
   }

那么如何重用同一个组件并从中只删除一个项目呢?

如果我的问题不对,请纠正我。

谢谢!

2 个答案:

答案 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。代码仅用于描述,不检查语法错误。希望你明白这一点。