信号从QML到C ++插槽,找不到QML信号

时间:2013-08-27 22:06:24

标签: qt qml signals-slots qtquick2

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

  

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

这是一个c ++代码段:

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代码段:

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"
        }
    }
}

1 个答案:

答案 0 :(得分:1)

SIGNAL行中的connect宏调用必须使用SIGNAL(sent(QString))明确地通知参数。

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

QObject *tempitem = tempview.rootObject();

文档中有complete example覆盖。