You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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运行的应用:

    1. 创建udev规则文件/etc/udev/hwdb.d/99-mouse-rotate.hwdb,写入以下内容:
      evdev:input:b0003v*p*
       EVDEV_ABS_00=:::90
       EVDEV_ABS_01=:::90
      
    2. 执行命令更新udev规则并生效:
      udevadm hwdb --update && udevadm trigger
    3. 重启设备后配置永久生效。

内容的提问来源于stack exchange,提问作者nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:36:03