在QML中接收C++信号

rou*_*rld 4 c++ qt qml

我发出信号然后用QML捕获; 但是,当我尝试读取附加到信号的参数时,我得到"未定义".以下是一些代码片段.谢谢你的帮助提前!

mymodel.h

class MyModel : public QObject
{
    Q_OBJECT

    ...

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

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();

...
Run Code Online (Sandbox Code Playgroud)

}

main.qml

Rectangle {
    Connections {
        target: MyModel
        onMySignal: console.log(a)
    }
}
Run Code Online (Sandbox Code Playgroud)

上述内容console.log(a)在预期时被调用; 但是,我希望输出为"1.0",但它只是说"未定义",我不知道为什么.我正在使用Qt 5.1和Qt Quick 2.0.

Dea*_*ron 8

可能是枚举参数在进程中导致错误,该错误将参数绑定到QML信号处理程序的上下文中.由于这个枚举似乎没有作为QML的类型公开,我不相信它可以正确地将它转换为qml,这可能会破坏整个过程.

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