You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:54:03