2013-07-22 102 views
4

我有信号被发射,然后捕获在QML;然而,当我尝试读取附加到信号的参数时,我会得到“未定义”。以下是一些代码片段。感谢您提前帮忙!接收CML信号QML

mymodel.h

class MyModel : public QObject 
{ 
    Q_OBJECT 

    ... 

    signals: 
     void mySignal(float a, some::enum b) 

    ... 
} 

mymodel.cpp

做些事情来发出信号(这不是一个问题,只需emit mySignal(1.0, 2.0);

someotherclass.cpp

无效SomeOtherClass :: setupQML() { ...

QQuickView *view = new QQuickView(); 

QWidget *container = QWidget::createWindowContainer(view); 

... 

QmlRootData = new RootData(); 

view->rootContext()->setContextObject(QmlRootData); 
view->rootContext()->setContextProperty("MyModel", model); 
view->setSource(QUrl("main.qml")); 
view->setResizeMode(QQuickView::SizeRootObjectToView); 

QObject* rootObj = view->rootObject(); 

... 

}

main.qml

Rectangle { 
    Connections { 
     target: MyModel 
     onMySignal: console.log(a) 
    } 
} 

上面console.log(a)得到预期时调用;然而,我期望输出为“1.0”,但它只是说“未定义”,我不知道为什么。我正在使用Qt 5.1和Qt Quick 2.0。

回答

6

这可能是枚举参数在将参数绑定到QML信号处理程序的上下文的过程中导致错误。既然它看起来并没有将这个枚举作为QML类型公开,我不认为它可以正确地将它转换为qml,这可能会打破整个过程。

鉴于您在发射信号时传递了两个浮点数,实际上应该是两个浮点数输入而不是浮点数和枚举吗?

+1

是的,你是对的。我拿出枚举并且信号按预期工作。这是令人失望的,因为我想我必须同时发出一个单独的信号来发射。这是一个错误,当这篇文章与两个浮动,在我的代码中它是正确的浮动和枚举。有没有办法将枚举暴露给QML? – roundtheworld

+0

http://stackoverflow.com/questions/4461017/exposing-qts-q-enums-to-qml 似乎相关。不要忘记标记答案已解决!祝你好运! – Deadron