c++ - 如何在 C++ 文件中声明的 qml 文件中使用信号

标签 c++ signals qml blackberry-10

我在 QML 中使用信号时遇到问题。 我在 cpp 文件中创建了一个信号,我想在 qml 文件中使用它 文件AppUI.hpp:

Class ApplicationUI: public QObject {
    Q_OBJECT
Q_PROPERTY(bool loading READ loading NOTIFY loadingChanged)
public:
    Q_SIGNALS:
    void loadingChanged();
private:
bool _loading;
bool loading() const;
...
}

在文件 AppUI.cpp 中:

ApplicationUI::ApplicationUI(bb::cascades::Application *app) :
        QObject(app),_loading(false) {
...
traitment
_loading=false;
emit lodingChanged();
}

bool AppnUI::loading() const{

    return _loading;
}

QML文件中:

MapView {
            id: mapview
            objectName: "mapViewObj"
            visible: !_mapViewTest.loading
         }
ActivityIndicator {

            visible: _mapViewTest.loading
            running: _mapViewTest.loading
        }

但这里的问题是我在控制台上得到了这个错误 错误:类 ApplicationUI 中不存在属性“loading”的 NOTIFY 信号“loadingChanged”。

最佳答案

首先,在 C++ 中,为了让您的数据成员加载对 QML 可见,您首先需要创建一个公共(public) getter,并将其放入 qproperty,如下所示:

Q_PROPERTY(bool getloading READ getloading NOTIFY loadingChanged)

public bool getloading() const;

这是因为 QML 无法访问 c++ 类中的私有(private)成员。

此外,在 QML 中,您可以像这样在 C++ 中使用信号:

onCreationCompleted: { // or other function
    _mapViewTest.lodingChanged.connect(whatyouwanttodo);
}

function whatyouwanttodo() {
    // do something
}

请注意,您连接的信号和功能需要具有相同的参数列表

关于c++ - 如何在 C++ 文件中声明的 qml 文件中使用信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20096418/

相关文章:

c - 在 C 中处理 SIGTSTP 信号

python - 如何在 python 程序中处理操作系统信号?

python - 单击按钮后刷新 QML 文件中的 QQuickWidget

qt - QML:如何锚定现有边距

c++ - OpenGL - 使用两个 GL 程序改变顶点的位置

django - 如何解决涉及 haystack 的循环导入?

c++ - 如何选择 DirectX 像素格式?

c++ - 如何从 C++ 代码中检索 QML 的 TextField 中的文本?

c++ - 为什么 C 宏不是类型安全的?

c++ - C++ 中的宽字 rune 字字符串