【问题标题】:Signal from QML to C++ slot, cannot find the QML signal从 QML 到 C++ 插槽的信号,找不到 QML 信号
【发布时间】:2013-08-27 22:06:24
【问题描述】:

我在 QML 中收到一个信号,我想连接到 C++ 中定义的插槽。但是我的代码失败了,我收到了错误:

QObject::connect: ../qt_cpp/mainwindow.cpp:66 中没有这样的信号 QDeclarativeContext::sent()

这是一个c++代码sn-p:

message_reading test;
QDeclarativeView tempview;
tempview.setSource(QUrl("qrc:/qml/media_screen.qml"));
QObject *item = tempview.rootContext();
QObject::connect(item, SIGNAL(sent()),
&test, SLOT(readMediaJSONDatabase(QString&)));

这是一个QML代码sn-p:

Image {
    id: bluetooth
    source: "images_mediahub/footer_icons/bluetooth_normal.png"
    signal sent(string msg)
    MouseArea {
        anchors.fill:  parent
        onClicked: {
            bluetooth.sent(Test.medialibrarydb.toString())
            info_load.source="./bluetooth.qml"
        }
    }
}

【问题讨论】:

    标签: qt qml signals-slots qtquick2


    【解决方案1】:

    connect 行中的SIGNAL 宏调用必须显式通知参数SIGNAL(sent(QString))

    此外,信号是由创建的对象发出的,但是您提供的代码 sn-p 正在尝试将其连接到上下文对象中。你需要一些类似的东西:

    QObject *tempitem = tempview.rootObject();
    

    在文档中有一个complete example 涵盖了这一点。

    【讨论】:

    • 不,我尝试在那里添加类型 SIGNAL(sent(QString)),但它不起作用。报同样的错误信息顺便说一句,编译成功,但是当打开应用程序窗口时,返回这个错误信息。
    • 啊,抱歉,现在我注意到您还试图将其附加到上下文中,这不是您想要的。将更新答案。
    • 还是谢谢你。我得到了一些新的更新......但仍在学习这个。
    • 您的更新实际上提出了一个不同的问题。我相信答案中的两点实际上解决了您原来的问题。
    猜你喜欢
    • 1970-01-01
    • 2012-02-08
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多