鼠标点击在 QT 应用程序中无法正常工作

鼠标点击在 QT 应用程序中无法正常工作

我运行 Gnome 作为桌面环境,鼠标工作正常。但是,当我尝试使用 QT 应用程序时,鼠标单击无法正常工作。例如,如果我在文本编辑器中单击并释放,它就会开始突出显示文本,就好像我仍然按住鼠标按钮一样。就好像没有注册一样鼠标向上事件。

任何想法为什么会发生这种情况,或者如何解决它?

答案1

我发现发生这种情况后,只需点击触摸屏即可解决问题。这是使用带有 Acer Spin 1 的 Ubuntu 18.04 。当我使用 FreeCAD 时,通常会发生这种情况。

答案2

最后,一个通用的解决方案!

该问题是由 Qt 对触摸屏的支持引起的。我所做的是使用xinput禁用触摸屏:

$ xinput --list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ DLL06E5:01 06CB:7A13 Touchpad             id=14   [slave  pointer  (2)]
⎜   ↳ ELAN Touchscreen                          id=13   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
[... bunch of keyboard stuff]

“ELAN Touchscreen”输入是我们关心的。它的 id 是 13。所以:

$ xinput --disable 13

关闭触摸屏输入后,该问题不再发生。我不必重新启动已经运行的 Qt 应用程序。可以通过以下方式重新启用触摸:

$ xinput --enable 13

这个AskUbuntu问题显示关闭触摸的其他方法。不幸的是,我不知道有什么方法可以仅针对特定应用程序或仅针对 Qt 应用程序关闭触摸。

Xephyr 没有出现问题的原因(如下所述)是因为 Xephyr 启动时不支持触摸事件。


(我保留这些信息是因为它可以帮助人们将来诊断类似的问题,或者帮助人们寻找更细粒度的解决方案。)

我在尝试在 Gnome 桌面下运行 Qt 5 应用程序时遇到了这个问题。我发现如果我在 Xephyr 会话中运行 Qt 应用程序,问题就会消失:

$ Xephyr :1 -screen 1240x800 &
$ DISPLAY=:1 path/to/executable

Xephyr 是一个 Xserver,可以充当另一个 Xserver 的客户端。 (我也尝试过 Xnest,它也有效。)通过在不同的 Xserver 中运行该软件,它基本上与默认 Xserver 上运行的 destkop 环境隔离。

为了一些用例场景,这可能是一个可用的解决方法。不幸的是,隔离意味着在 Xephyr 中运行的应用程序和其他应用程序之间的剪切和粘贴需要添加一些大量的粘合剂。


我尝试lxqt-config查看是否可以更改一些 Qt 设置来解决问题,但没有找到解决问题的设置。

我还尝试启动应用程序,-style=gtk但这只会改变视觉风格,而不会改变行为。

答案3

我在 chroot (Crouton) 中运行 XFCE 的华硕 Chromebook 也遇到同样的问题。

我确实设法通过在 Dolphin 上反复戳屏幕来取消鼠标按下的设置,直到(我猜?)它处理了“鼠标向上”事件。

答案4

这篇文章可能对你有帮助。 https://blog.csdn.net/flfihpv259/article/details/90377827

我使用 cmake 在我的 CMakeLists.txt 上添加以下两行

set(CMAKE_BUILD_RPATH "lib:/usr/local/elevocsetting/lib")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g -O3 -no-pie")

/usr/local/elevocsetting/lib是我的安装目录

-no-pie可以生成application/x-applicationmime类型

相关内容