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

linuxFb平台QML ListView按键自动重复功能失效求助

QML ListView按键长按导航失效(linuxfb平台)

问题现象

开发的QML应用在Linux桌面xcb平台运行时,ListView启用keyNavigationEnabled: true后,长按上下键可正常滚动;但切换到linuxfb平台,长按仅能从第一个条目切换到第二个,按键自动重复功能失效。

示例代码

Main.qml

//Main.qml
import QtQuick
import QtQuick.Window

Window {
    width: 480
    height: 272
    visible: true
    title: qsTr("Hello World")

    Rectangle {
        width: 180
        height: 40

        Component {
            id: contactDelegate
            Item {
                width: 180
                height:40
                Column {
                  Text {text: '<b>Name:</b>' + name}
                  Text {text: '<b>Name:</b>' + number}
                }
            }
        }

       ListView {
           width: 180
           height: 200
           keyNavigationEnabled: true

           Component.OnCompleted: itemAtIndex(0).forceActiveFocus()

           model: ContactModel{}
           delegate: contactDelegate
           highlight: Rectangle {
               color: "lightsteelblue"
               radius: 5
           }
           focus: true

       }
    }

}

ContactModel.qml

//ContactModel.qml
import QtQuick

ListModel {
    ListElement {
        name: "Bill Smith"
        number: "555 3264"
    }

    ListElement {
        name: "Bill Smith"
        number: "555 3264"
    }

    ListElement {
        name: "John Brown"
        number: "111 2222"
    }

    ListElement {
        name: "Sam Wise"
        number: "555 0473"
    }
    ListElement {
        name: "Eric Flag"
        number: "333 0473"
    }
    ListElement {
        name: "Max Van"
        number: "444 0473"
    }
}

linuxfb启动命令

QT_QPA_FB_DISABLE_INPUT=1 QT_QPA_EVDEV_KEYBOARD_PARAMETERS=/dev/input/event7 QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event7:nocompress:abs QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event7 QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=480x272 QT_QPA_GENERIC_PLUGINS=evdevmouse,evdevkeyboard,evdevtouch QWS_MOUSE_PROTO=/dev/input/event7 ./myapp

解决思路

  • 配置evdev键盘按键重复参数
    linuxfb平台依赖evdev处理输入,默认可能未启用按键自动重复。修改QT_QPA_EVDEV_KEYBOARD_PARAMETERS,添加重复启用开关及速率配置:

    QT_QPA_EVDEV_KEYBOARD_PARAMETERS=/dev/input/event7:repeat:on:repeat-delay=500:repeat-rate=30
    

    其中repeat-delay是首次重复前的延迟(单位ms),repeat-rate是后续重复的间隔速率(单位ms),可根据需求调整。

  • 手动实现ListView长按滚动逻辑
    若evdev层面配置无效,可在QML中通过Timer和按键事件手动处理:

    ListView {
        // 原有属性保留
        focus: true
    
        property bool keyUpPressed: false
        property bool keyDownPressed: false
        Timer {
            id: scrollTimer
            interval: 100
            repeat: true
            onTriggered: {
                if (keyUpPressed && currentIndex > 0) currentIndex--
                else if (keyDownPressed && currentIndex < count - 1) currentIndex++
            }
        }
    
        Keys.onPressed: {
            if (event.key === Qt.Key_Up) {
                keyUpPressed = true
                if (!scrollTimer.running) {
                    currentIndex--
                    scrollTimer.start()
                }
                event.accepted = true
            } else if (event.key === Qt.Key_Down) {
                keyDownPressed = true
                if (!scrollTimer.running) {
                    currentIndex++
                    scrollTimer.start()
                }
                event.accepted = true
            }
        }
    
        Keys.onReleased: {
            if (event.key === Qt.Key_Up) {
                keyUpPressed = false
                if (!keyDownPressed) scrollTimer.stop()
                event.accepted = true
            } else if (event.key === Qt.Key_Down) {
                keyDownPressed = false
                if (!keyUpPressed) scrollTimer.stop()
                event.accepted = true
            }
        }
    }
    
  • 排查输入设备冲突
    启动命令中同一event设备同时绑定键盘、鼠标、触摸屏,可能引发事件冲突。通过cat /proc/bus/input/devices确认各输入设备对应的节点,给键盘分配独立的正确设备节点。

  • 升级Qt版本或检查平台特性支持
    部分旧版Qt在linuxfb平台对按键重复的支持存在缺陷,尝试升级至Qt 6.2及以上版本,或查阅Qt官方文档确认linuxfb平台的输入处理特性差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:52:42