-
启用 Gamepad 模块
在项目文件(.pro
)中添加:
QT += gamepad
-
创建手柄对象
QGamepad *m_gamepad = new QGamepad(0, this);
-
捕获手柄输入
// 连接信号槽(示例:A 按钮和左摇杆)
connect(gamepad, &QGamepad::buttonAChanged, [](bool pressed) {
if (pressed) qDebug() << "A 按钮按下";
});
connect(gamepad, &QGamepad::axisLeftXChanged, [](double value) {
qDebug() << "左摇杆 X 轴:" << value; // 范围: [-1.0, 1.0]
});
常用信号
涵盖按钮、摇杆、扳机键和方向键的输入。以下是详细的信号列表和使用示例:
1. 按钮信号(Buttons)
信号名称 | 触发条件 | 返回值/参数 | 对应 Xbox 按钮 |
---|---|---|---|
buttonAChanged(bool) | A 按钮按下/释放 | true =按下 | <kbd>A</kbd> |
buttonBChanged(bool) | B 按钮按下/释放 | true =按下 | <kbd>B</kbd> |
buttonXChanged(bool) | X 按钮按下/释放 | true =按下 | <kbd>X</kbd> |
buttonYChanged(bool) | Y 按钮按下/释放 | true =按下 | <kbd>Y</kbd> |
buttonL1Changed(bool) | LB 肩键按下/释放 | true =按下 | <kbd>LB</kbd> |
buttonR1Changed(bool) | RB 肩键按下/释放 | true =按下 | <kbd>RB</kbd> |
buttonL2Changed(double) | LT 扳机键压力变化 | 0.0 ~1.0 | <kbd>LT</kbd> |
buttonR2Changed(double) | RT 扳机键压力变化 | 0.0 ~1.0 | <kbd>RT</kbd> |
buttonSelectChanged(bool) | 菜单键(左侧)按下/释放 | true =按下 | <kbd>≡</kbd> |
buttonStartChanged(bool) | 开始键(右侧)按下/释放 | true =按下 | <kbd>☰</kbd> |
buttonGuideChanged(bool) | Xbox Logo 键按下/释放 | true =按下 | <kbd>Xbox</kbd> |
示例代码:
connect(gamepad, &QGamepad::buttonAChanged, [](bool pressed) {
qDebug() << "A 按钮状态:" << pressed;
});
connect(gamepad, &QGamepad::buttonL2Changed, [](double value) {
qDebug() << "LT 扳机压力:" << value;
});
2. 摇杆信号(Joysticks)
信号名称 | 触发条件 | 返回值/参数范围 | 对应摇杆 |
---|---|---|---|
axisLeftXChanged(double) | 左摇杆水平移动 | -1.0 (左)~1.0 (右) | 左摇杆 X 轴 |
axisLeftYChanged(double) | 左摇杆垂直移动 | -1.0 (上)~1.0 (下) | 左摇杆 Y 轴 |
axisRightXChanged(double) | 右摇杆水平移动 | -1.0 (左)~1.0 (右) | 右摇杆 X 轴 |
axisRightYChanged(double) | 右摇杆垂直移动 | -1.0 (上)~1.0 (下) | 右摇杆 Y 轴 |
示例代码:
connect(gamepad, &QGamepad::axisLeftXChanged, [](double x) {
qDebug() << "左摇杆 X:" << x;
});
connect(gamepad, &QGamepad::axisRightYChanged, [](double y) {
qDebug() << "右摇杆 Y:" << y;
});
3. 方向键信号(D-Pad)
信号名称 | 触发条件 | 返回值/参数 | 对应方向 |
---|---|---|---|
buttonUpChanged(bool) | 方向上键按下/释放 | true =按下 | <kbd>↑</kbd> |
buttonDownChanged(bool) | 方向下键按下/释放 | true =按下 | <kbd>↓</kbd> |
buttonLeftChanged(bool) | 方向左键按下/释放 | true =按下 | <kbd>←</kbd> |
buttonRightChanged(bool) | 方向右键按下/释放 | true =按下 | <kbd>→</kbd> |
示例代码:
connect(gamepad, &QGamepad::buttonUpChanged, [](bool pressed) {
if (pressed) qDebug() << "方向上键按下";
});
注意事项
-
信号连接时机:确保在
QGamepad
对象初始化后再连接信号。 -
线程安全:信号槽默认在主线程处理,跨线程需使用
QueuedConnection
。 -
多手柄支持:通过
QGamepadManager
管理多个手柄实例。