在Qt
+ QML
中,我经常使用Q_PROPERTY
。 NOTIFY
信号非常适合重新评估价值。
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
的唯一方法吗?
答案 0 :(得分:0)
您需要删除此内容:text: "OldValue: " + myComponent.myValue
,因为阅读myComponent.myValue
将通过调用GetMyValue
从C ++获取值。
在QML中,您可以创建一个函数
function updateDisplay(){
iText.text = "OldValue: " + myComponent.myValue
}
Text {
id: iText
text: "OldValue: "
}
每次要更新值时都从C ++调用updateDisplay()
。
基本上,在QML中,如果您读取C ++值(var aValue = myCPPComponent.myValue
),它将调用Q_PROPERTY中指定的getter,如果设置值(myCPPComponent.myValue = aValue
),它将调用setter。总是