В Qt
+ QML
, я использую Q_PROPERTY
много. Сигналы NOTIFY
превосходны, чтобы переоценить значение.Как сообщить Q_PROPERTY только один раз
class SomeComponent: public QObject
{
public:
const QString& GetMyValue(void) const;
void SetMyValue(const QString &value);
Q_PROPERTY(QString myValue READ GetMyValue WRITE SetMyValue NOTIFY myValueChanged)
signals:
void valueChanged();
}
Text {
text: myComponent.myValue
}
То, что я пытаюсь сделать это, что теперь у меня есть сценарий, где я только хочу, чтобы получить значение один раз, и не позволить ему обновить в QML.
Например: Я хочу, чтобы пользователь мог знать предыдущее значение, сохраняя при этом возможность его изменить.
TextInput {
text: myComponent.myValue
onAccepted:{
myComponent.myValue = text
}
}
Text {
text: "OldValue: " + myComponent.myValue
}
Если я сейчас набираю TextInput и нажимаю Enter, текст в элементе Text также обновляется. Как я могу это предотвратить?
Могу ли я отключиться от имущества?
Или это единственный способ изменить: GetMyValue
и SetMyValue
- Q_INVOKABLE
?
Вы хотите, чтобы QML отображал старое значение, но хотите ли вы, чтобы модель C++ хранила старое или новое значение? – user2436719
Я хочу, чтобы модель C++ всегда имела новое значение. Только в QML, я хочу, чтобы иметь возможность решить, какое значение я хочу видеть, в моем примере пусть Text имеет значение myValue, когда был создан элемент Text. Например, это может быть достигнуто через Q_INVOKABLE. Я хочу знать, есть ли другой способ. – RvdK
«f Теперь я ввожу текст TextInput, текст в элементе Text также обновляется» - вы уверены в этом? Потому что это не должно. Ваш код имеет привязку одного направления - изменение myValue изменит текст TextInput, но изменение TextInput не изменит myValue. – dtech