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

Qt3D中QKeyboardHandler信号未触发/未捕获问题求助

Qt3D QKeyboardHandler信号未触发的解决方案

以下是你遗漏的关键步骤和需要修正的点:

  • 必须注册QInputAspect到Aspect引擎
    Qt3D的输入系统依赖Qt3DInput::QInputAspect组件,官方simple-cpp示例默认只初始化了渲染相关的Aspect,未加载输入Aspect,导致键盘设备和处理器无法正常工作。需要添加如下代码:
// 假设engine是你的Qt3DWindow实例
Qt3DInput::QInputAspect *inputAspect = new Qt3DInput::QInputAspect;
engine->aspectEngine()->registerAspect(inputAspect);
  • 修正QKeyboardDevice的创建逻辑
    不要直接将QKeyboardDevice的父对象设为rootEntity,改为独立创建后关联到处理器:
Qt3DInput::QKeyboardDevice *keyboardDevice = new Qt3DInput::QKeyboardDevice;
keyboardHandler->setSourceDevice(keyboardDevice);
  • 确保Qt3D窗口获得键盘焦点
    程序运行后,点击Qt3D窗口使其激活获得焦点,否则键盘事件无法传递到Qt3D输入系统。

  • 规范信号槽连接语法
    你代码中&::OrbitTransformController::onPressed的前置::属于冗余写法,修正为:

QObject::connect(keyboardHandler,
                 &Qt3DInput::QKeyboardHandler::pressed,
                 controller,
                 &OrbitTransformController::onPressed);

内容的提问来源于stack exchange,提问作者bitmap kid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:12:18