zoukankan      html  css  js  c++  java
  • QML布局概述(Qt Quick Layouts Overview)

    Qt Quick布局(Qt Quick Layouts)概述

    Qt Quick Layouts是用于在用户界面中排列Items的, 它们本身也是Items。 由于Qt Quick Layouts也可以调整其本身的大小,因此非常适合可调整大小的用户界面.

    首先

    使用import语句将QML类型导入到您的应用程序中

    import QtQuick.Layouts 1.11
    

    关键点

    关键点:

    • 可以使用Layout.alignment属性指定项目的对齐方式
    • 可调整大小的Item可以使用Layout.fillWidth和Layout.fillHeight属性指定
    • 可以使用Layout.minimumWidth,Layout.preferredWidth和Layout.maximumWidth属性指定尺寸限制(“width”可以替换为“height”,就指定的是height的限制)
    • 可以使用spacing,rowSpacing或columnSpacing来指定间距

    除上述功能外,GridLayout还添加了以下功能:

    • 可以使用Layout.row和Layout.column属性确定Grid坐标
    • 自动Grid坐标和flow, rows, columns 参数一起使用
    • 可以使用Layout.rowSpan(Item所占行数)和Layout.columnSpan(Item所占列数)属性指定跨行或跨列的Item的跨度。

    例子:

    Window {
            visible: true
             640
            height: 480
            title: qsTr("Hello World")
        RowLayout {
            anchors.fill: parent
            spacing: 6                  //布局中的所有Item之间的间距均为6像素
            Rectangle {
                color: "black"
                Layout.preferredWidth: 100  //建议宽度
                //Layout.preferredHeight: 150   //建议高度
                Layout.fillHeight: true         //占据为其分配的所有高度
            }
            Rectangle {
                color: "plum"
                Layout.fillWidth: true      //占据为其分配的所有宽度
                Layout.fillHeight: true     //占据为其分配的所有高度
            }
        }
    }
    

    注意: 布局负责分配其子Items的几何形状, 因此你不应指定子Items的width, height, x, y或其他任何可能影响布局的因素(如anchors等). 否则会产生冲突, 导致布局的结果具有不确定性. 如果子Item也是布局, 也同样要遵循这个原理. 因此,只有没有父布局的布局才能具有anchors.fill:parent.

    大小控制

    RowLayout {
        id: layout
        anchors.fill: parent
        spacing: 6
        Rectangle {
            color: 'azure'
            Layout.fillWidth: true
            Layout.minimumWidth: 50         //最小宽度50
            Layout.preferredWidth: 100      //建议宽度100
            Layout.maximumWidth: 300        //最大宽度300
            Layout.minimumHeight: 150       //最小高度150
            Text {
                anchors.centerIn: parent
                text: parent.width + 'x' + parent.height
            }
        }
        Rectangle {
            color: 'plum'
            Layout.fillWidth: true
            Layout.minimumWidth: 100        //最小宽度
            Layout.preferredWidth: 200      //建议宽度
            Layout.preferredHeight: 100     //建议高度
            Text {
                anchors.centerIn: parent
                text: parent.width + 'x' + parent.height
            }
        }
    }
    

    Loyout会组合每个Item的约束, 为布局元素提供最终的隐式约束. 如上述中子Item实际占用高宽如下表:

    最小值 建议值 最大值
    隐式约束 (width) 156 306
    隐式约束 (height) 150 150 150

    指定首选尺寸

    当存在多个约束时, 它将按下表中的顺序查询这些候选属性,并使用具有有效宽度或高度的第一个候选:

    候选属性 说明
    Layout.preferredWidth 或 Layout.preferredHeight 如果默认的隐式大小未给出最佳设置,则应由应用程序修改这些属性。
    implicitWidth 或 implicitHeight 这些属性应该由每个Item提供,以提供有意义的理想大小,例如,显示Text类型的所有内容所需的大小。 隐式宽度或高度0会被解析为无效。
    width 和 height 如果以上属性均无效,则布局将会采纳width和height属性。

    一个项目可以指定Layout.preferredWidth,而不必指定Layout.preferredHeight。 在这种情况下,有效的首选高度将由implicitHeight(或最终的height)确定。

    注意: width或height属性仅作为最终的备用。 如果要覆盖首选大小,建议使用Layout.preferredWidth或Layout.preferredHeight。 依靠width或height属性来指定首选大小可能会带来一些意外的行为。 例如,更改width或height属性不会触发布局重新排列。 此外,当强制布局进行完全重建时,它可能会使用实际的宽度和高度,而不是QML文件中指定的宽度和高度。

    连接windows和布局

    你只可以通过锚定来设置Layout根据windows窗口大小来变化:

    RowLayout {
        id: layout
        anchors.fill: parent
    

    Layout的大小限制可用来限制其父元素window的大小。 你可以从Layout中获取大小约束,并在Window元素的minimumWidth,minimumHeight,maximumWidth和maximumHeight上设置这些约束。 以下代码确保了window的大小不能超出Layout的限制:

    minimumWidth: layout.Layout.minimumWidth
    minimumHeight: layout.Layout.minimumHeight
    maximumWidth: 1000
    maximumHeight: layout.Layout.maximumHeight
    

    注意:由于在这个场景下layout.Layout.maximumWidth是无限的,因此我们不能将其绑定到Window的maximumWidth属性。它需要绑定一个整数, 因此,我们将固定的最大宽度设置为1000。

    最后,你通常希望窗口的初始大小为布局的隐式大小:

     layout.implicitWidth
    height: layout.implicitHeight
    

    以上文章参考自Qt官方文档: https://doc.qt.io/qt-5/qtquicklayouts-overview.html
    依个人理解, 简要翻译, 如有错漏, 欢迎指正.

  • 相关阅读:
    cmd 重启oracle服务
    删除父节点同时删除该节点上的所有子节点(oracle)
    安装Oracle提示OracleMTSRecoveryService 已经存在,解决方法
    扩展easyui treegrid 级联选择
    Jetson TX2 不同的工作模式
    CMake版本升级
    高斯混合背景模型运动目标检测
    Windows WSL 安装OpenCV
    C++实现队列
    图像的尺度描述
  • 原文地址:https://www.cnblogs.com/linkyip/p/13153872.html
Copyright © 2011-2022 走看看