仅在QML中有条件地设置属性

时间:2016-12-06 10:32:36

标签: qml qtquick2

我正在尝试有条件地设置自定义QML元素的属性。意思是我只想在事情成真时设置它。

在这个例子中,我想在应用程序具有特定值时设置someProperty,但如果没有,我想让对象保留原始值。另外我想让它表现得像一个绑定。意味着如果条件发生变化,它会再次恢复/设置属性。

main.qml

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    MyObject {
        someProperty: (title == "different" ? "other_value" : 'undefined')
    }
}

MyObject.qml

Rectangle {

    property var someProperty: "original_value"

    Component.onCompleted: {
        console.error("MyOject.someProperty: " + someProperty)
    }
}

所以这打印:

  

qml:MyOject.someProperty:undefined

我希望它打印

  

qml:MyOject.someProperty:original_value

所以我尝试过:

  • someProperty: (title == "different" ? "other_value"):错误
  • someProperty: (title == "different" ? "other_value" : someProperty):绑定循环

我不想使用任何onCompleted种语法,因为我想保留绑定而不是丢弃我的代码。

2 个答案:

答案 0 :(得分:2)

您可以将StatesPropertyChanges一起使用,并在满足条件时将状态设置为有效。

State - 系统具有保存的属性,一旦再次放置State,它将恢复原始状态。

答案 1 :(得分:1)

您可以尝试使用 std::vector<MyClass> vector; std::vector<MyClass>::iterator it; for(it=vector.begin();it!=vector.end();) { if(it->removeFromList()) { it=vector.erase(it); } else { it->doSomething(); ++it; } } 元素

Binding