2013-11-20 25 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列表

相关问题