2016-12-06 2 views
1

Я пытаюсь установить свойство пользовательского элемента QML условно. Значение Я хочу только установить, если что-то истинно.Устанавливать свойство условно в 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 не определено

Я хочу, чтобы напечатать

QML: MyOject.someProperty: original_value

Так что я пробовал:

  • someProperty: (title == "different" ? "other_value"): ошибка
  • someProperty: (title == "different" ? "other_value" : someProperty): связывание петля

Я не хочу использовать какой-либо вид синтаксиса типа onCompleted, потому что я хочу сохранить привязку и не мутировать мой код.

ответ

1

Вы можете попробовать с Binding элементом

MyObject { 
    id: myObject 
} 

Binding { 
    target: myObject 
    property: "someProperty" 
    value: "other_value" 
    when: title == "different" 
} 
+1

Не сработает. Когда условие снова станет неправильным, прежнее значение не будет восстановлено. – derM

+0

Действительно, нашел этот отчет об ошибке: https://bugreports.qt.io/browse/QTBUG-33444 – RvdK

+0

@derM: только когда прежнее значение не было привязкой, когда оно было привязкой, оно было восстановлено: строка свойств someProperty: (true? "original_value": "original_value") – RvdK

2

Вы можете использовать States вместе с PropertyChanges и установить государство, чтобы быть активным, когда условие выполняется.

State -Система обладает тем свойством, что она сохраняет восстановление исходного состояния, как только снова возвращается State.

+0

Спасибо, я посмотрел, но я не думаю, что это подходит. У меня есть компоненты с 5 или более свойствами, которые должны быть установлены условно. Это невозможно с использованием состояний, в которых активна только 1. – RvdK

+0

@RvdK: Вы можете определить несколько * StateMachines * для каждого подмножества свойств, которые изменяются вместе.Либо вы можете определить 'Item', единственной целью которого является наличие состояния, которое изменяет некоторые свойства в своих родительских узлах, или вы можете использовать' StateGroup'. http://doc.qt.io/qt-5/qml-qtquick-stategroup.html – derM

Смежные вопросы