如何让Q_PROPERTY仅评估一次

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

标签: qt properties qml

Qt + QML中,我经常使用Q_PROPERTYNOTIFY信号非常适合重新评估价值。

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元素中的文本也会更新。我该如何防止这种情况?

我可以断开与财产的联系吗?

或者是将GetMyValueSetMyValue更改为Q_INVOKABLE的唯一方法吗?

1 个答案:

答案 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。总是