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_INVOKABLE
或 public slot
。但是即使你对你的方法做了这样的标记,这也意味着你只得到 alarmCount 属性 一次 一次 并且它不会被更新,因为你没有进行绑定而只是一个方法调用。
我有一个带有 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_INVOKABLE
或 public slot
。但是即使你对你的方法做了这样的标记,这也意味着你只得到 alarmCount 属性 一次 一次 并且它不会被更新,因为你没有进行绑定而只是一个方法调用。