C++端触发的Signal无法被QML侧接收的问题求助
问题原因及解决方法
1. 核心问题:QML Connections语法适配错误
你当前使用的Qt Quick 2.9对应Qt 5.9版本,Qt 5系列的Connections组件不支持显式给信号处理器赋值匿名函数的写法,你写的onEmitted: function() { ... }属于Qt 6才支持的语法,Qt 5中直接写代码块即可。
修正后的QML代码如下:
import QtQuick 2.9 import QtQuick.Window 2.2 Window { visible: true width: 640 height: 480 title: qsTr("Hello World") Connections { target: obj onEmitted: { console.log("received") } } }
2. 其他可能的异常排查点
如果修改语法后依然无法接收信号,按以下顺序检查:
- 清理项目后重新执行qmake,再编译运行,避免旧编译缓存导致元对象信息未更新
- 检查项目.pro文件,确认
Sample.h已经被添加到HEADERS变量中,否则qmake不会调用moc处理Q_OBJECT宏,会导致跨语言信号交互失效 - 可在QML的
Component.onCompleted回调中添加console.log(obj),如果输出不为空则说明上下文属性注册正常,反之检查main函数中setContextProperty的调用时机(需要在engine.load之前调用,你当前的写法是对的)
内容的提问来源于stack exchange,提问作者asitdhal
相关产品推荐
相关产品推荐

