甚至在 SplitView 中初始分配空间

Posted

技术标签:

【中文标题】甚至在 SplitView 中初始分配空间【英文标题】:Even initial distribution of space in a SplitView 【发布时间】:2016-08-28 04:22:54 【问题描述】:

我正在使用 SplitView 编写 QML 应用程序。我希望初始空间在项目之间均匀分布,但一个项目占据了所有空间。

import QtQuick 2.7
import QtQuick.Layouts 1.3
import QtQuick.Controls 1.4

ApplicationWindow 
    id:window; visible:true
    width:500; height:300
    title:'Borked Layouts'

    SplitView 
        orientation:Qt.Horizontal
        anchors.fill:parent
        Rectangle  color:'red'
            Layout.minimumWidth:50; Layout.fillWidth:true
            Layout.preferredWidth:window.width/2
        
        SplitView 
            orientation:Qt.Vertical
            Layout.minimumWidth:50
            Layout.preferredWidth:window.width/2
            Rectangle  color:'green'
                Layout.minimumHeight:50; Layout.fillWidth:true
            
            Rectangle  color:'blue'
                Layout.minimumHeight:50; Layout.fillWidth:true
            
        
    

我可以拖动空格之间的分隔符来实现我想要的分布,并且尊重最小尺寸。但是如何才能在项目之间共享初始分布?

【问题讨论】:

直到您需要将视图拆分为 3 或更多并发现调整大小有多糟糕并从头开始实现您自己的拆分视图... 【参考方案1】:

我之前从未使用过SplitView,所以这让我很惊讶,但是在查看bugreports.qt.io 的类似问题后,我看到了this:

SplitView 并不是真正的布局,因此我们不会支持附加的 Layout 属性中的所有属性。使用 SplitView 时,只需直接在项目上设置宽度和高度即可。

这有点与Layout 的用法相冲突,所以我不确定为什么会这样,但我想这是有充分理由的。

所以,你可以这样实现:

import QtQuick 2.7
import QtQuick.Layouts 1.3
import QtQuick.Controls 1.4

ApplicationWindow 
    id: window
    visible: true
    width: 500
    height: 300

    SplitView 
        orientation: Qt.Horizontal
        anchors.fill: parent

        Rectangle 
            color: 'red'
            width: window.width / 2
        
        SplitView 
            orientation: Qt.Vertical
            Layout.minimumWidth: 50

            Rectangle 
                color: 'green'
                Layout.minimumHeight: 50
                Layout.fillWidth: true
            
            Rectangle 
                color: 'blue'
                Layout.minimumHeight: 50
                Layout.fillWidth: true
            
        
    

【讨论】:

!这就是我相信文档所得到的。我没有尝试显式宽度或高度,因为文档说:“由于 fillWidth 项目将自动调整大小以适应额外空间,因此将忽略对宽度和高度的显式分配(但 Layout.minimumWidth 和 Layout.maximumWidth仍将受到尊重)。” 句子的第二部分实际上是指fillWidth项目,而不是一般的项目。该文档可能会更清晰。 啊...这与我的解释不同,但我明白你在说什么。

以上是关于甚至在 SplitView 中初始分配空间的主要内容,如果未能解决你的问题,请参考以下文章

NSDate - 默认初始化程序如何在堆上分配空间?

指针 分配空间

变量的存储空间分配情况

操作系统文件存储空间管理(存储空间的划分与初始化)

操作系统文件存储空间管理(存储空间的划分与初始化)

初始化向量时检查错误分配