Я пытаюсь вызвать слот QML для зарегистрированного типа, подняв сигнал в моем коде C ++. Слот никогда не вызывается.
В main.cpp я регистрирую тип:
qmlRegisterType<MsgController>("MyStuff",1,0,"MsgController");
в msgcontroller.h я объявляю сигнал:
class MsgController : public QObject
{
Q_OBJECT
public:
...
signals:
void msgReceived(const QString& msg);
в msgcontroller.cpp поднимаю сигнал
void MsgController::setMsg(const QString &msg)
{
emit msgReceived(msg);
}
и в моем файле main.qml у меня есть слот для msgReceived:
import MyStuff 1.0
MsgController {
onMsgReceived: {
console.log("message received:"+msg);
}
}
Слот onMsgReceived никогда не вызывается. Я что-то пропустил?
Я не понял, что я подключился к неправильному экземпляру MsgController в моем коде. Один экземпляр был создан кодом C ++, но я действительно хотел вызвать слот для экземпляра, созданного механизмом Qml.
Как только я подключился к правильному экземпляру, приведенный выше код работал нормально.