我有一个带有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上,并且可以看到它返回正确的值,但我的前端实际上从未显示标签的值。
答案 0 :(得分:1)
您实际上并没有对变量进行绑定。正确的绑定看起来像:
text: app.alarmCount
但是在你的代码中它是:
text: app.alarmCount()
使用您的代码会出错,因为您无法访问Q_OBJECT
或Q_INVOKABLE
的任何public slot
方法。但是即使你对你的方法做了这样的标记,这意味着你只能一次获得alarmCount属性,并且它不会被更新,因为你没有进行绑定而只是一个方法调用。