注册类型上的 C++ Signal QML Slot

C++ Signal QML Slot on registered type

我正在尝试通过在我的 C++ 代码中发出信号来调用注册类型上的 QML 槽。插槽永远不会被调用。

在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 引擎创建的实例上的插槽。 一旦我连接到正确的实例,上面的代码就可以正常工作了。