QML 绑定不更新

QML binding not updating

我有一个带有 QML 前端的简单 BB10 应用程序。

GUI 由几个按钮和一个标签组成

Page {
    Container {
        Label {
            text: app.alarmCount()
        }        
        Button {
            text: qsTr("Resend Notification")
            onClicked: {
                app.resendNotification();
            }
        }
        Button {
            text: qsTr("Stop Service")
            onClicked: {
                app.stopService();
            }
        }
        Button {
            text: qsTr("Kill Service")
            onClicked: {
                app.killService();
            }
        }
    }
}

和 C++ class

class ApplicationUI: public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString alarmCount READ alarmCount NOTIFY AlarmUpdate)
public:
    ApplicationUI();
    virtual ~ApplicationUI() { }

    Q_INVOKABLE void resendNotification();
    Q_INVOKABLE void stopService();
    Q_INVOKABLE void killService();

    QString alarmCount() const;
    void setAlamCount(int newCount);

signals:
    void AlarmUpdate();

private:
    bb::system::InvokeManager* m_invokeManager;

    QString m_alarmCountDisplay;
};

以及 class

中希望相关的部分
QString ApplicationUI::alarmCount() const
{
    return m_alarmCountDisplay;
}

void ApplicationUI::setAlamCount(int newCount)
{
    m_alarmCountDisplay = QString("%1 Alarms").arg(newCount);
    emit AlarmUpdate();
}

我的问题是标签从不显示警报计数字符串 属性。我在 emit 上设置了一个断点,可以看到它被调用,在 alarmCount() getter 上可以看到它返回了正确的值,但我的前端实际上从未显示标签的值。

您实际上并未对变量进行绑定。正确的绑定将如下所示:

text: app.alarmCount

但在您的代码中是:

text: app.alarmCount()

使用您的代码会出错,因为您无法访问 Q_OBJECT 的任何方法,它不是 Q_INVOKABLEpublic slot。但是即使你对你的方法做了这样的标记,这也意味着你只得到 alarmCount 属性 一次 一次 并且它不会被更新,因为你没有进行绑定而只是一个方法调用。