树莓派4B本地用户运行QML程序时Hover功能失效问题求助
问题描述
我用QML开发树莓派带界面的程序,本地用户启动时Hover功能完全失效;root用户启动时Hover正常,但UI显示有差异。本地用户已加入input组,evtest测试正常。相关QML代码和/dev/input目录权限信息如下:
QML代码示例
import QtQuick 2.15 import QtQuick.Controls 2.15 as Control import QtQuick.Layouts 1.15 Control.Button { id: button property alias textObj: _text property alias txt: item_metrics_first.text property string borderColor: "#69ccff" property string backgroundColor: "#025b97" property string textColor: "white" property string activeColor: "#014a7d" background: Rectangle { opacity: enabled ? 1 : 0.3 Text{ id: _text text: item_metrics_first.elidedText anchors.fill: parent font.family: "Din Pro Black" color: button.down ? activeColor: (button.hovered ? borderColor: textColor) horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } TextMetrics { id: item_metrics_first font: _text.font elideWidth: button.width - 10 elide: Text.ElideMiddle } color: button.down ? borderColor: backgroundColor border.color: button.down ? activeColor: (borderColor) border.width: 2 radius: 5 } }
/dev/input目录权限(执行ls -l /dev/input输出)
drwxr-xr-x 2 root root 120 Oct 13 13:31 by-id drwxr-xr-x 2 root root 160 Oct 13 13:31 by-path crw-rw---- 1 root input 13, 64 Oct 13 13:31 event0 crw-rw---- 1 root input 13, 65 Oct 13 13:25 event1 crw-rw---- 1 root input 13, 66 Oct 13 13:25 event2 crw-rw---- 1 root input 13, 67 Oct 13 13:25 event3 crw-rw---- 1 root input 13, 68 Oct 13 13:25 event4 crw-rw---- 1 root input 13, 69 Oct 13 13:25 event5 crw-rw---- 1 root input 13, 70 Oct 13 13:26 event6 crw-rw---- 1 root input 13, 71 Oct 13 13:26 event7 crw-rw---- 1 root input 13, 63 Oct 13 13:25 mice crw-rw---- 1 root input 13, 32 Oct 13 13:31 mouse0
解决方案
尝试以下步骤排查修复:
- 临时开放X11权限:执行
xhost +local:,再启动程序测试Hover功能。若有效,将该命令添加到用户的.bashrc或.profile文件中实现持久化。 - 重启用户会话:注销后重新登录本地用户,确保input组的权限生效。
- 指定Qt平台插件:启动程序时添加参数指定使用xcb平台:
./your_app -platform xcb,验证Hover是否恢复。 - 配置udev规则:新建
/etc/udev/rules.d/99-mouse-permissions.rules文件,写入内容:
执行SUBSYSTEM=="input", GROUP="input", MODE="0660"udevadm control --reload-rules && udevadm trigger使规则生效。 - 简化代码测试:用极简QML代码测试Hover事件是否触发:
运行后查看控制台输出,判断是样式逻辑问题还是事件未触发。import QtQuick 2.15 import QtQuick.Controls 2.15 as Control Control.Button { text: "Test Hover" onHoveredChanged: console.log("Hovered:", hovered) }
内容的提问来源于stack exchange,提问作者Илья Белянов
相关产品推荐
相关产品推荐

