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
相关产品推荐
相关产品推荐

