2013-11-20 30 views
1

我在使用QML中的信號時遇到了問題。 我已經創造了cpp文件的信號,我想在QML文件 文件AppUI.hpp使用它:如何在C++文件中聲明的qml文件中使用信號

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

bool AppnUI::loading() const{ 

    return _loading; 
} 
:文件 AppUI.cpp

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; 
... 
} 

QML文件

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

      visible: _mapViewTest.loading 
      running: _mapViewTest.loading 
     } 

但這裏的問題是,我得到這個錯誤在控制檯上 錯誤:NOTIFY信號'loadingChanged'屬性'加載'在類ApplicationUI中不存在。

+1

唯一的錯誤,我能看到這麼

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

注遠遠是「發射lodingChanged();」拼寫錯誤。控制檯錯誤,你得到指示在c + +或qml的問題? – hyarion

+0

感謝您的回覆。我糾正了拼寫,它像一個魅力:) – oumaimadev

回答

0

首先,在C++中,爲了讓您的數據成員加載可見到QML,你首先需要創建一個公共的getter,並把它變成qproperty像如下:

Q_PROPERTY(bool getloading READ getloading NOTIFY loadingChanged) 

public bool getloading() const; 

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

此外,在QML,你可以在C++中使用的信號,像這樣:你的信號和功能連接需要具有相同的PARAM列表

相關問題