簡體   English   中英

如何在Q ++文件中使用在C ++文件中聲明的信號

[英]how to use a signal in qml file that was declarated in c++ file

我在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可見,您首先需要創建一個公共getter,並將其放入qproperty中,如下所示:

Q_PROPERTY(bool getloading READ getloading NOTIFY loadingChanged)

public bool getloading() const;

這是因為QML無法訪問c ++類中的私有成員。

另外,在QML中,您可以像這樣在c ++中使用信號:

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

function whatyouwanttodo() {
    // do something
}

請注意,您連接的信號和功能需要具有相同的參數列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM