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

QML中键盘上下箭头输入时Play()函数无法触发视频播放问题

问题根因

你代码的核心问题是焦点事件的接收对象不匹配:Qt Quick ListView 通过键盘上下键切换条目时,默认会将焦点分配给 delegate 的根组件,也就是你代码里的rect1,但你把onFocusChanged回调写在了子组件rect2上。rect2默认没有开启焦点捕获,键盘切换时不会收到焦点变化事件,回调里的播放逻辑自然不会执行。
而点击操作能触发是因为你把MouseArea绑在了rect2上,点击时直接调用了播放逻辑,和焦点事件无关。

修复方案

按以下两步修改即可同时保证焦点高亮正常、视频正常播放:

  1. 将onFocusChanged回调从rect2移到根组件rect1上,保证键盘切换时能触发播放逻辑
  2. 修改rect2的颜色绑定逻辑,不再绑定自身的focus属性,改为绑定父组件rect1的focus属性,保证焦点高亮显示正确

修改后的delegate代码片段参考:

delegate: Rectangle{
    id:rect1
    width:75
    height:75
    color:"#333333"

    // 把回调移到这里
    onFocusChanged:{
        if(focus){
            console.log("fokus")
            list.currentIndex=index
            video.source=url
            video.play()
        }
    }

    Image{
        id:img1
        anchors.centerIn: parent
        source:icon
    }

    Rectangle{
        id:rect2
        width:video.width-rect1.width
        height:rect1.height
        anchors.left:rect1.right
        border.color: "darkgray"
        // 这里的focus改成rect1.focus
        color: rect1.focus ? "red" : "#333333"

        Text{
            id:text1
            text:uid
            color:'white'
            font.pointSize: 14
            x:15
            y:17
            anchors.left: parent
        }

        MouseArea{
            id:mouse
            anchors.fill:parent
            onClicked:{
                list.currentIndex=index
                video.source=url
                video.play()
                // 点击时手动给rect1设置焦点,保证点击后焦点高亮也正常
                rect1.forceActiveFocus()
            }
        }
    }
}

可选优化

如果想更稳妥避免焦点逻辑异常,可以直接监听ListView的currentIndex变化触发播放,不需要依赖焦点事件:

ListView{
    id:list
    // 原有属性不变
    onCurrentIndexChanged: {
        if(currentIndex >= 0) {
            video.source = xmlModel.get(currentIndex).url
            video.play()
        }
    }
}

这样不管是键盘切换还是点击切换条目,只要选中项变化就会触发播放,逻辑更统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:27:05