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

时间:2013-11-20 12:48:05

标签: 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'。

1 个答案:

答案 0 :(得分:0)

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

Q_PROPERTY(bool getloading READ getloading NOTIFY loadingChanged)

public bool getloading() const;

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

另外,在QML中,您可以像c ++一样使用c ++中的信号:

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

function whatyouwanttodo() {
    // do something
}

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