Сигнал из QML в слот C++, не удается найти сигнал QML

Я получил сигнал в QML и хочу подключиться к слоту, определенному в C++. Однако мой код не работает, и я получаю сообщение об ошибке:

QObject::connect: Нет такого сигнала QDeclarativeContext::sent() в ../qt_cpp/mainwindow.cpp:66

Вот фрагмент кода С++:

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

person zero    schedule 27.08.2013    source источник


Ответы (1)


Вызов макроса SIGNAL в строке connect должен явно указывать параметр с помощью SIGNAL(sent(QString)).

Кроме того, сигнал испускается созданным объектом, но предоставленный вами фрагмент кода вместо этого пытается подключить его в объекте контекста. Вам понадобится что-то вроде:

QObject *tempitem = tempview.rootObject();

Существует полный пример это описано в документации.

person Gustavo Niemeyer    schedule 28.08.2013
comment
Нет, я пытался добавить туда тип SIGNAL(sent(QString)) и это не работает. сообщить о том же сообщении об ошибке BTW, скомпилировать успешно, но при открытии окна приложения вернуть это сообщение об ошибке. - person zero; 28.08.2013
comment
Ах, извините, теперь я заметил, что вы также пытаетесь привязать это к контексту, а это не то, что вам нужно. Обновлю ответ. - person Gustavo Niemeyer; 28.08.2013
comment
в любом случае, спасибо. Я получил новое обновление ... но все еще изучаю это. - person zero; 28.08.2013
comment
Ваше обновление на самом деле задает другой вопрос. Я считаю, что два пункта в ответе действительно решают ваш первоначальный вопрос. - person Gustavo Niemeyer; 28.08.2013