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

标签 c++ qt qml blackberry-10

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

相关文章:

c++ - 微软 Visual Studio 社区 2019 : fatal error C1083: Cannot open include file: 'corecrt.h' : No such file or directory

qt - 我可以使用 JavaScript 从 qt 应用程序中的服务器获取 JSON 数据吗?

c++ - Windows 中的 QSystemTrayIcon 工具提示最大长度是多少?

python - FileDialog 显示 Python3 与 QML 的不同界面

c++ - 自写的 tensorflow c++ 代码的 Bazel 测试通过了所有测试,无论预期值如何

c++ - 派生类中virtual operator==的重新定义

C++ 函数 ‘WINBOOL GetProcessIoCounters(HANDLE, PIO_COUNTERS)’ 的参数太少

c++ - 如何使用 C++ 和 QtQuick 实现游戏循环

qt - WebView显示空白白屏

qt - 为 Windows 发行版构建 Qt/QML 应用程序