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