Qt Quick Controls 1.3 SplitView如何通过JS动态调整子项实现折叠
解决方案
Qt Quick Controls 1.x的SplitView子项尺寸由自身的Layout附加属性、SplitView附加属性共同控制,你原有代码的问题主要是两处:
- 属性拼写错误:
flightlist.Layout.maximumHeight = 0中id应为大写L的flightList,该行代码实际未执行 - 直接赋值覆盖了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
相关产品推荐
相关产品推荐

