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

树莓派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,提问作者Илья Белянов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:07:02