注册类型的C ++ Signal QML Slot

时间:2015-01-08 21:02:56

标签: c++ qml signals-slots qt5.4

我试图通过在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插槽。有什么我错过的吗?

1 个答案:

答案 0 :(得分:0)

我没有意识到我在代码中连接了错误的MsgController实例。一个实例是由C ++代码创建的,但我真的想调用Qml引擎创建的实例上的插槽。 一旦我连接到正确的实例,上面的代码工作正常。