我发出信号,然后在 QML 中捕获;然而,当我尝试读取附加到信号的参数时,我得到“未定义”。以下是一些代码片段。感谢您提前提供帮助!
我的模型.h
class MyModel : public QObject
{
Q_OBJECT
...
signals:
void mySignal(float a, some::enum b)
...
}
我的模型.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();
...
主.qml
Rectangle {
Connections {
target: MyModel
onMySignal: console.log(a)
}
}
上面的 console.log(a)
在预期的时候被调用;但是,我希望输出为“1.0”,但它只是说“未定义”,我不确定为什么。我正在使用 Qt 5.1 和 Qt Quick 2.0。
最佳答案
可能是枚举参数在将参数绑定(bind)到 QML 信号处理程序上下文的过程中导致错误。因为这个枚举似乎没有作为一种类型公开给 QML,所以我不相信它可以正确地将它翻译成 qml,这可能会破坏整个过程。
鉴于您在发出信号时传递了两个 float ,它实际上应该是两个浮点输入而不是一个 float 和一个枚举吗?
关于c++ - 在 QML 中接收 C++ 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17793671/