PyQt5 eglfs后端kiosk模式下屏幕旋转后绘制光标不跟随如何解决
eglfs模式下Qt应用光标与显示旋转不同步修复方案
该问题为Qt eglfs后端的固有表现,QT_QPA_EGLFS_ROTATION环境变量仅作用于应用GUI渲染面,不会同步修改硬件光标的旋转映射逻辑,可通过以下三种方式修复:
方案一:禁用硬件光标(推荐,配置最简单)
新增环境变量QT_QPA_EGLFS_HW_CURSOR=0,和原有QT_QPA_EGLFS_ROTATION=90共同导出即可。禁用硬件光标后,Qt会将光标作为GUI的一部分进行软件渲染,自动跟随整个EGL表面旋转,坐标、显示方向完全同步,普通kiosk场景下无明显性能损耗。方案二:自定义旋转后的硬件光标
若必须保留硬件光标能力,可在PyQt应用初始化阶段手动设置旋转后的全局光标,示例代码如下:from PyQt5.QtGui import QCursor, QPixmap, QTransform from PyQt5.QtWidgets import QApplication import sys if __name__ == "__main__": app = QApplication(sys.argv) # 生成旋转90度的光标素材 rotate_tranform = QTransform().rotate(90) default_cursor_pix = QPixmap(":/qt-project.org/styles/commonstyle/images/arrow.png").transformed(rotate_tranform) # 调整光标热点坐标适配旋转后的位置,16为默认光标像素尺寸,可按需修改 app.setOverrideCursor(QCursor(default_cursor_pix, 0, 15)) # 原有应用业务代码 # window = YourMainWindow() # window.show() sys.exit(app.exec_())方案三:系统层面配置输入设备旋转映射
该方案无需修改Qt配置,适配所有基于eglfs运行的应用:- 创建udev规则文件
/etc/udev/hwdb.d/99-mouse-rotate.hwdb,写入以下内容:evdev:input:b0003v*p* EVDEV_ABS_00=:::90 EVDEV_ABS_01=:::90 - 执行命令更新udev规则并生效:
udevadm hwdb --update && udevadm trigger - 重启设备后配置永久生效。
- 创建udev规则文件
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

