当且仅当按下Q之后,用wasd四个键分别选择人物图标附近前后左右的图标,选中的图标再按一次e确认,否则再次按q退出;未按下q时,wasd控制人物前后左右前进,改造keyPressEvent
时间: 2024-09-16 15:00:36 浏览: 24
WASD改上下左右
5星 · 资源好评率100%
在 `keyPressEvent` 中,你需要对 `'Q'` 和非 `'Q'` 的情况做出明确区分。当按下 `'Q'` 时,执行退出逻辑,而其他键用于选择和确认。以下是改造后的代码段:
```cpp
if (event->text() == "Q") { // 检查是否按下的是 'Q'
m_SelectedKey.clear();
setIcon(m_NormalIcon); // 退出操作,清除选择并恢复原始图标
} else if (event->text().length() == 1) { // 非 'Q' 且按下单个字母键
QChar key = event->text()[0];
if (!m_SelectedKey.isNull()) { // 如果已有选择
if (key == 'E') { // 按下 'E' 确认选择
emit selectCharacter(m_SelectedKey); // 发出信号确认选择
m_SelectedKey.clear(); // 清除选择
} else { // 非 'E',可能是新的选择
setIcon(map[key].pressed); // 更新为新选择的图标
m_SelectedKey = key; // 保存当前选择
}
} else { // 初始按下非 'E' 的情况
if (key == 'W' || key == 'S' || key == 'A' || key == 'D') {
// 按下 wasd 控制人物移动,但不改变选择
// 这里假设你有相应的 UI 更新逻辑处理移动操作
// 实际代码中可能会涉及位置变化或其他交互效果
}
}
}
```
这个版本的 `keyPressEvent` 首先检查 `'Q'`,然后处理 `'W'`, `'S'`, `'A'`, 和 `'D'` 的移动操作,如果按下 `'E'` 则确认选择,否则保持当前选择。这样,只有按下 `'Q'` 才能退出选择模式。
阅读全文