c++ - 在 QML 中接收 C++ 信号

标签 c++ qt qml

我发出信号,然后在 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/

相关文章:

qt - 当 Item 在 QML 中的位置/大小发生变化时,它是否会发出信号?

c++ - 为什么 mkdir 的行为在不同的 Linux 发行版上不同?

c++ - 如何传递函数指针(回调)并在不知道它的类型的情况下调用它?

qt - 使用带有标签的 QML 工具提示

qt - QML QtQuick.Controls 2.2 Combobox 没有 selectByMouse;什么是替代方案?

c++ - 无法创建 Meshlab Visual Studio 2013 项目

c++ - 先前在此声明,C++ 模板 :

c++ - 带空格的 std::cin 输入?

c++ - 获取调用函数的类的名称

c++ - Qt 虚拟键盘和 QInputContextFactory