无法在 Linux 下使用 QML QtGamepad
Unable to use QML QtGamepad under Linux
我无法在 Linux 下的 QML 中使用 QGamepad。
"unable" 我的意思是没有发出游戏手柄信号(按下按钮...)
配置:
- Ubuntu 20.04
- Qt 5.15
- 罗技游戏手柄 F310
游戏手柄被Ubuntu认可:
- dmesg 给出:
usb 1-1.6: Product: Gamepad F310
input: Logitech Gamepad F310 as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/input/input26
- jstest-gtk 可以很好地识别游戏手柄:
Logitech Gamepad F310
Device: /dev/input/js0
and is responsive when pressing buttons
示例 QML 代码:
import QtQuick 2.15
import QtGamepad 1.15
Rectangle {
width: 320
height: 240
Gamepad {
onButtonAChanged: {
console.log("ButtonA")
}
onButtonBChanged: {
console.log("ButtonB")
}
}
}
我尝试定义 QT_GAMEPAD 和 QT_GAMEPAD_DEVICE 环境变量,但没有任何改进。
export QT_GAMEPAD=evdev
export QT_GAMEPAD_DEVICE=/dev/input/js0
注意:相同的 QML 代码在 MS Windows10(相同的 Qt 版本)下运行良好。
感谢 Jack White,这是解决方案:
属性需要使用GamepadManager初始化Gamepad模块的deviceId。
import QtQuick 2.15
import QtGamepad 1.15
Rectangle {
width: 320
height: 240
Gamepad {
deviceId: GamepadManager.connectedGamepads.length > 0 ? GamepadManager.connectedGamepads[0] : -1
onButtonAChanged: {
console.log("ButtonA");
}
onButtonBChanged: {
console.log("ButtonB");
}
}
}
我无法在 Linux 下的 QML 中使用 QGamepad。
"unable" 我的意思是没有发出游戏手柄信号(按下按钮...)
配置:
- Ubuntu 20.04
- Qt 5.15
- 罗技游戏手柄 F310
游戏手柄被Ubuntu认可:
- dmesg 给出:
usb 1-1.6: Product: Gamepad F310
input: Logitech Gamepad F310 as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/input/input26
- jstest-gtk 可以很好地识别游戏手柄:
Logitech Gamepad F310
Device: /dev/input/js0 and is responsive when pressing buttons
示例 QML 代码:
import QtQuick 2.15
import QtGamepad 1.15
Rectangle {
width: 320
height: 240
Gamepad {
onButtonAChanged: {
console.log("ButtonA")
}
onButtonBChanged: {
console.log("ButtonB")
}
}
}
我尝试定义 QT_GAMEPAD 和 QT_GAMEPAD_DEVICE 环境变量,但没有任何改进。
export QT_GAMEPAD=evdev
export QT_GAMEPAD_DEVICE=/dev/input/js0
注意:相同的 QML 代码在 MS Windows10(相同的 Qt 版本)下运行良好。
感谢 Jack White,这是解决方案:
属性需要使用GamepadManager初始化Gamepad模块的deviceId。
import QtQuick 2.15
import QtGamepad 1.15
Rectangle {
width: 320
height: 240
Gamepad {
deviceId: GamepadManager.connectedGamepads.length > 0 ? GamepadManager.connectedGamepads[0] : -1
onButtonAChanged: {
console.log("ButtonA");
}
onButtonBChanged: {
console.log("ButtonB");
}
}
}