我发出的信号然后被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
void 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。
答案 0 :(得分:7)
可能是枚举参数在进程中导致错误,该错误将参数绑定到QML信号处理程序的上下文中。由于这个枚举似乎没有作为QML的类型公开,我不相信它可以正确地将它转换为qml,这可能会破坏整个过程。
鉴于您在发出信号时传递了两个浮点数,它实际上应该是两个浮点输入而不是浮点数和枚举吗?