我在这里遇到了一些有趣的问题。有很多线程我发现人们正在努力隐藏或摆脱嵌入式Qt GUI上的光标......但我正在尝试将光标移到显示上嵌入式Qt GUI。
我继承了一段时间前已经“完成”的项目,而那个在该项目上做得最多的人已经继续前进了。快进到今天,需要为这个功能性触摸屏GUI添加光标。系统操作系统是Yocto Linux,它在帧缓冲区上运行Qt 5.4应用程序。
我已经搜索了Qt代码,那里没有任何东西可以隐藏光标。我在适当的QT_QPA_FB_HIDECURSOR = 0环境变量中添加了我的Qt启动脚本。我已经尝试在GUI中添加QCursor obejct。不幸的是,这些都没有奏效。使用QCusor我有时能够在屏幕上显示光标,但不依赖于触摸输入(光标显示在我以编程方式移动到的位置,但是当我与GUI交互时它停留在那里)
我的触摸输入事件绑定到Qt(通过QT_QPA_GENERIC_PLUGINS = evdevtouch和QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS = / dev / input / event9:rotate = 180),但由于某种原因,触摸输入无法绑定到光标。
此时我花了几天时间搞乱环境变量和启动脚本修改,但我所做的一切都没有得到我想要的结果。
有没有人想到在哪里寻找这个问题的解决方案?
谢谢! 伊恩
答案 0 :(得分:4)
所以,现在3个月后,我认为我和我的团队想出了一个可解决的问题。
解决方案的路径始于“使用libinput”上的Qt Documentation。文档归结为一些重要的陈述:
可以在环境变量QT_QPA_EVDEV_MOUSE_PARAMETERS,QT_QPA_EVDEV_KEYBOARD_PARAMETERS和QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS
中设置设备节点名称等参数
只要未设置QT_QPA_EGLFS_HIDECURSOR(对于eglfs)或QT_QPA_FB_HIDECURSOR(对于linuxfb)并且Qt的基于libudev的设备发现报告至少有一个鼠标可用,鼠标光标就会显示。当libudev支持不存在时,除非通过环境变量明确禁用,否则鼠标光标始终显示。
evdevtablet插件为Wacom和类似的基于笔的平板电脑提供基本支持。它仅生成QTabletEvent事件。要启用它,请在环境中传递QT_QPA_GENERIC_PLUGINS = evdevtablet,或者在命令行上传递-plugin evdevtablet参数。插件可以采用设备节点参数,例如QT_QPA_GENERIC_PLUGINS = evdevtablet:/ dev / event1,以防Qt的自动设备发现(基于libudev或/ dev / input / event *的演练)不起作用或行为不当。
所以,在我的系统中,我有设备节点: event0 , event1 , event2 , event3 , event4 , event5 , mouse 和 mouse0 。因为我试图让鼠标工作,所以我假设我必须使用 mouse0 节点。这导致我设置这些环境变量:
QT_QPA_GENERIC_PLUGINS=evdevmouse
QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/mouse0
令我沮丧的是,这些环境变量一无所获。经过一段时间,我的团队和我想出了如何在我们的系统上从Qt源获得调试输出:
我们很快发现来自 mouse0 和鼠标的输入事件基本上都是垃圾数据。在我们的系统中,我们在内核中设置了EVDEV,因此鼠标输入也与设备节点 event0 相关联。当我们尝试将Qt鼠标参数设置为 event0 时,我们开始看到看起来像真实数据的调试输出。
QT_QPA_GENERIC_PLUGINS=evdevmouse
QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event0
但是,仍然存在无鼠标指针的问题。过了一会儿,我们回顾了Qt文档,特别是上面列出的第2段。作为最后的尝试,我们尝试添加QT_QPA_FB_HIDECURSOR环境变量......
QT_QPA_GENERIC_PLUGINS=evdevmouse
QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event0
QT_QPA_FB_HIDECURSOR=0
和...瞧!经过无数个小时的调试和阅读文档,我们终于得到了一个鼠标指针。
我认为我们问题的主要症结是误解了Qt文档。
只要... QT_QPA_FB_HIDECURSOR(对于linuxfb)未设置
,鼠标光标就会显示
通过“未设置”,Qt意味着明确定义为FALSE ...而不是简单地“未设置”。
这个解决方案对我们有用,但确实至少有一件事需要。在此过程中,我偶然发现this thread answer on the Unix StackEx指向input/input.txt的内核文档。在“3.2.2 mousedev”部分中,您可以看到以下行:
每个“鼠标”设备都分配给一个鼠标或数字化仪,除了 最后一个 - '老鼠'。所有人都共享这个单字符设备 鼠标和数字化仪,即使没有连接,设备也是 当下。这对于热插拔USB鼠标很有用,所以程序 即使没有老鼠也可以打开设备。
这对我们来说意味着虽然我们可以使用 event0 (当我们拔掉鼠标时它会消失)我们的鼠标输入事件处理,但我们将无法支持热插拔进行一些内核/ Qt源修改或弄清楚如何使鼠标作为Qt鼠标输入参数工作。
所以,“为什么 event0 工作而不是 mouse0 / 鼠标”的问题仍然存在...但是现在我们'我们有一个可以忍受的解决方案。
更新:现在稍后我们发现udev在我们的系统上运行不正常。我们将ydev添加到我们的Yocto构建包组中的RDEPENDS,现在我们可以设置
QT_QPA_GENERIC_PLUGINS=evdevmouse
我们得到一个支持hotplug的鼠标指针。
答案 1 :(得分:0)
我不知道这是否适用于您的问题(我不使用QT),但有一个
HAVE_TOUCHSCREEN=1
文件中的 machconfig
变量。它通常位于recipes-bsp/formfactor/formfactor
目录中的BSP层中。
将其设置为1
会使光标不可见。
尝试将其设置为0