gpt4 book ai didi

c++ - QML 绑定(bind)不更新

转载 作者:行者123 更新时间:2023-11-30 05:48:20 24 4
gpt4 key购买 nike

我有一个带有 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 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;
};

和类中希望相关的部分

QString ApplicationUI::alarmCount() const
{
return m_alarmCountDisplay;
}

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

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

最佳答案

您实际上并未对变量进行绑定(bind)。正确的绑定(bind)看起来像:

text: app.alarmCount

但是在你的代码中是:

text: app.alarmCount()

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

关于c++ - QML 绑定(bind)不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28239079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com