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

Qt Quick Controls 1.3 SplitView如何通过JS动态调整子项实现折叠

解决方案

Qt Quick Controls 1.x的SplitView子项尺寸由自身的Layout附加属性、SplitView附加属性共同控制,你原有代码的问题主要是两处:

  1. 属性拼写错误:flightlist.Layout.maximumHeight = 0 中id应为大写L的flightList,该行代码实际未执行
  2. 直接赋值覆盖了QML属性绑定,且修改普通height属性不受SplitView布局逻辑支持

修正后的实现方式

方法1:保留属性绑定,仅切换状态

你已经给C1.SplitView.preferredHeight绑定了shouldCollapse状态,仅需补充修改Layout.maximumHeight即可,无需手动赋值覆盖绑定:

onCollapse: {
    console.log("minimize")
    flightList.shouldCollapse = !flightList.shouldCollapse
    if (flightList.shouldCollapse) {
        flightList.Layout.maximumHeight = 0
        flightList.visible = false
    } else {
        // 展开时恢复原始最大高度限制
        flightList.Layout.maximumHeight = mainPage.height - 60 - 30
        flightList.visible = true
    }
    // 强制SplitView重新计算布局,解决中间项位置错位问题
    splitView.update()
}

方法2:手动控制所有布局属性

如果不需要保留绑定,可以直接修改SplitView附加属性:

onCollapse: {
    const isCollapsed = flightList.C1.SplitView.preferredHeight === 0
    if (isCollapsed) {
        // 展开
        flightList.C1.SplitView.preferredHeight = 300
        flightList.Layout.maximumHeight = mainPage.height - 60 - 30
        flightList.visible = true
    } else {
        // 折叠
        flightList.C1.SplitView.preferredHeight = 0
        flightList.Layout.maximumHeight = 0
        flightList.visible = false
    }
    splitView.update()
}

额外优化建议

  • 不要给SplitView的子项直接设置height属性,会和SplitView的布局逻辑冲突,初始高度统一用C1.SplitView.preferredHeight设置
  • 可以移除flightList的width: parent.width声明,SplitView会自动填充水平方向尺寸

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 20:39:00