QT之Xbox手柄

  • 启用 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() << "方向上键按下";
});

注意事项

  1. 信号连接时机:确保在 QGamepad 对象初始化后再连接信号。

  2. 线程安全:信号槽默认在主线程处理,跨线程需使用 QueuedConnection

  3. 多手柄支持:通过 QGamepadManager 管理多个手柄实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值