输入
如果没有窗口系统,则可以通过evdev
直接或使用诸如libinput、
tslib库 的帮助来读取鼠标,键盘,触摸输入。注意,这要求/dev/input/event*
用户可以读取设备节点。eglfs
和linuxfb
已编译包含所有输入处理代码。
使用libinput
libinput是一个用于处理输入设备的库。它提供了Qt自己的evdev
输入支持的替代方法。要启用libinput
,请确保在配置和构建Qt时用于的开发文件libudev
和libinput
可用。xkbcommon
如果需要键盘支持,则也有必要。随着eglfs
与linuxfb
这些插件使用没有进一步的行动是必需的libinput
默认。如果libinput
无法获得支持或QT_QPA_EGLFS_NO_LIBINPUT
设置了环境变量,则可以使用Qt自己的evdev处理程序。
在没有libinput的eglfs和linuxfb上输入
像设备节点名称参数可以在环境变量设置QT_QPA_EVDEV_MOUSE_PARAMETERS
,QT_QPA_EVDEV_KEYBOARD_PARAMETERS
和QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS
。用冒号分隔条目。这些参数可以替代在-plugin
命令行参数中传递设置的方法,并且在某些后端它们是必不可少的:eglfs和linuxfb使用内置的输入处理程序,因此没有单独的-plugin
参数在使用。
此外,可以通过设置QT_QPA_EGLFS_DISABLE_INPUT
或QT_QPA_FB_DISABLE_INPUT
来禁用内置输入处理程序1
。
触摸
对于某些电阻式单点触摸屏,可能有必要退回到使用tslib
方式,而不是依赖Linux多点触摸协议和事件设备。对于现代触摸屏,这不是必需的。tslib
载体可以通过设置环境变量来启用QT_QPA_EGLFS_TSLIB
或QT_QPA_FB_TSLIB
为1。要改变的装置中,设置环境变量TSLIB_TSDEVICE
或传递命令行的设备名称。请注意,tslib
输入处理程序会生成鼠标事件并仅支持单点触摸,与此相反,输入处理程序也会evdevtouch
生成真正的多点触摸QTouchEvent事件。
该了evdev触摸处理器支持以下额外的参数:
/dev/input/...
-指定输入设备的名称。如果没有给出,Qt会通过libudev或遍历可用节点来寻找合适的设备。rotate
-在某些触摸屏上,必须旋转坐标,方法是将其设置rotate
为90、180或270。invertx
和inverty
-要在输入事件中反转X或Y坐标,请传递invertx
或inverty
。
例如,export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event5:rotate=180
在启动应用程序之前进行操作会导致显式指定的触摸设备并翻转坐标-在实际屏幕和触摸屏的方向不匹配时很有用。
参考:
https://doc.qt.io/qt-5/embedded-linux.html
https://wayland.freedesktop.org/libinput/doc/latest/what-is-libinput.html#what-libinput-is