【问题标题】:Receiving C++ signal in QML在 QML 中接收 C++ 信号
【发布时间】:2013-07-22 17:25:12
【问题描述】:

我发出信号,然后在 QML 中捕获;但是,当我尝试读取附加到信号的参数时,我得到“未定义”。以下是一些代码sn-ps。提前感谢您的帮助!

我的模型.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();

...

}

main.qml

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

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

【问题讨论】:

    标签: c++ qt qml


    【解决方案1】:

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

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

    【讨论】:

    • 是的,你是对的。我取出枚举,信号按预期工作。这令人失望,因为我想我必须同时发出一个单独的信号。这是用两个浮点数制作这篇文章时的错字,在我的代码中,它作为浮点数和枚举是正确的。有没有办法将枚举暴露给 QML?
    • stackoverflow.com/questions/4461017/exposing-qts-q-enums-to-qml 似乎相关。不要忘记将答案标记为已解决!祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多