Qt Quick - SplitView

news2025/3/1 0:36:21

Qt Quick - SplitView使用总结

  • 一、概述
  • 二、属性介绍
  • 三、简单使用
  • 四、序列化SplitView的状态
  • 五、定制化

一、概述

SplitView是一个水平或垂直布局元素的控件,每个元素之间有一个可拖动的分配页面内容的滑块。很像IDE里面的那些窗口。就像下面的简单的布局内容一样。
在这里插入图片描述
手动调整后:
在这里插入图片描述

这个的源代码

import QtQuick 2.0
import QtQuick.Controls 2.14
import QtQuick.Window 2.12
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.5

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")


    SplitView {
        anchors.fill: parent
        orientation: Qt.Horizontal

        Rectangle {
            implicitWidth: 200
            SplitView.maximumWidth: 400
            color: "lightblue"
            Label {
                text: "布局页1"
                anchors.centerIn: parent
            }
        }

        SplitView{
            SplitView.minimumWidth: 50
            SplitView.fillWidth: true

            orientation: Qt.Vertical
            Rectangle{
                color: "pink"
                SplitView.minimumHeight: 200
                SplitView.fillWidth: true

                Label{
                    anchors.centerIn: parent

                    text: "布局2-1"
                }
            }

            Rectangle{
                color: "lightyellow"

                SplitView.minimumHeight: 100
                SplitView.fillWidth: true

                Label{
                    anchors.centerIn: parent

                    text: "布局2-2"
                }
            }
        }

        Rectangle {
            implicitWidth: 200
            color: "lightgreen"
            Label {
                text: "布局页3"
                anchors.centerIn: parent
            }
        }
    }
}

二、属性介绍

SplitView管理的Item支持以下附加属性:

  • SplitView.minimumWidth
  • SplitView.minimumHeight
  • SplitView.preferredWidth
  • SplitView.preferredHeight
  • SplitView.maximumWidth
  • SplitView.maximumHeight
  • SplitView.fillWidth(只有一个子项时为true)
  • SplitView.fillHeight(只有一个子项时为true)

此外,每个Handel都具有以下只读附加属性。

  • SplitHandle.hovered
  • SplitHandle.pressed
    注意:Handel应该是纯视觉的,而不是处理事件,因为它可能会干扰它们的悬停和按下状态。

SplitView中元素的首选大小可以通过implicitWidth、implicitHeight或SplitView指定。preferredWidth和SplitView.preferredHeight:

  SplitView {
      anchors.fill: parent

      Item {
          SplitView.preferredWidth: 50
      }

      // ...
  }

三、简单使用

对于水平的SplitView,没有必要指定每个元素的首选高度,因为它们会被调整到视图的高度。这反过来适用于垂直视图。水平的 SplitView 会撑满整个垂直方向的高度,而垂直的 SplitView 会撑满整个水平方向宽度。

当一个分割Handel被拖动时,SplitView.preferredWidth 或 SplitView.preferredHeight 属性会被覆盖,取决于SplitView 的方向 orientation 。

orientation 有两个取值:

  • Qt.Horizontal :水平方向 (默认).
  • Qt.Vertical : 垂直方向

要在水平视图中限制元素的大小,可以使用以下属性。

 SplitView {
      anchors.fill: parent

      Item {
          SplitView.minimumWidth: 25
          SplitView.preferredWidth: 50
          SplitView.maximumWidth: 100
      }

      // ...
  }

要限制垂直视图中元素的大小,可以使用以下属性。

SplitView {
      anchors.fill: parent
      orientation: Qt.Vertical

      Item {
          SplitView.minimumHeight: 25
          SplitView.preferredHeight: 50
          SplitView.maximumHeight: 100
      }

      // ...
  }

SplitView中总会有一个item (fill item)具有SplitView.fillWidth设置为true(或SplitView.fillHeight,如果方向是Qt.Vertical)。这意味着当其他Item被布局时,该Item将获得所有剩余空间。

默认情况下,SplitView的最后一个可见子元素会设置这个值,但可以通过显式地将另一个元素的fillWidth设置为true来改变这个值。

Handel可以属于物品的左侧或上方,也可以属于物品的右侧或下方:
如果填充项在右侧:Handel属于左侧项。
如果填充项在左侧:Handel属于右侧项。
要创建一个包含三个元素的SplitView,并让中间的元素占据多余的空间,可以这样做:

  SplitView {
      anchors.fill: parent
      orientation: Qt.Horizontal

      Rectangle {
          implicitWidth: 200
          SplitView.maximumWidth: 400
          color: "lightblue"
          Label {
              text: "View 1"
              anchors.centerIn: parent
          }
      }
      Rectangle {
          id: centerItem
          SplitView.minimumWidth: 50
          SplitView.fillWidth: true
          color: "lightgray"
          Label {
              text: "View 2"
              anchors.centerIn: parent
          }
      }
      Rectangle {
          implicitWidth: 200
          color: "lightgreen"
          Label {
              text: "View 3"
              anchors.centerIn: parent
          }
      }
  }

四、序列化SplitView的状态

SplitView的主要目的是允许用户轻松配置各种UI元素的大小。此外,在不同的会话中,应该记住用户的首选大小。为了实现这一点,SplitView.preferredWidth和SplitView.preferredHeight属性可以使用 saveState() 和 restoreState() 函数序列化:

  import QtQuick.Controls 2.14
  import Qt.labs.settings 1.0

  ApplicationWindow {
      // ...

      Component.onCompleted: splitView.restoreState(settings.splitView)
      Component.onDestruction: settings.splitView = splitView.saveState()

      Settings {
          id: settings
          property var splitView
      }

      SplitView {
          id: splitView
          // ...
      }
  }

此外,还可以使用设置函数的value()和setValue():

  import QtQuick.Controls 2.14
  import Qt.labs.settings 1.0

  ApplicationWindow {
      // ...

      Component.onCompleted: splitView.restoreState(settings.value("ui/splitview"))
      Component.onDestruction: settings.setValue("ui/splitview", splitView.saveState())

      Settings {
          id: settings
      }

      SplitView {
          id: splitView
          // ...
      }
  }

五、定制化

在这里插入图片描述

  SplitView {
      id: splitView
      anchors.fill: parent

      handle: Rectangle {
          implicitWidth: 4
          implicitHeight: 4
          color: SplitHandle.pressed ? "#81e889"
              : (SplitHandle.hovered ? Qt.lighter("#c2f4c6", 1.1) : "#c2f4c6")
      }

      Rectangle {
          implicitWidth: 150
          color: "#444"
      }
      Rectangle {
          implicitWidth: 50
          color: "#666"
      }
  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

调度系统: Quartz

最近在做数据中台架构设计,整体架构设计完后发现数据中台最重要的就是元数据和调度系统。元数据设计参考了atlas、metcat、datahus,模型设计、数据架构、技术架构基本完成。现在设计调度系统,才发现调度系统不像别的系统,主要是理…

缓存与数据库双写一致性几种策略分析

作者:京东零售 于泷 一、背景 在高并发场景中,为防止大量请求直接访问数据库,缓解数据库压力,常用的方式一般会增加缓存层起到缓冲作用,减少数据库压力。引入缓存,就会涉及到缓存与数据库中数据如何保持一…

春天到了,讲讲Spring的工作原理

一、春天到了,讲讲Spring的工作原理 在致力于优质IT知识出版分享的异步社区,有这么一本书——两版累计销售了近10w本,它可是完完全全靠着自己过硬的内容实力打出的这片天! 第二版已出版4年,基于Spring 5.x编写&#x…

PostGre数据库操作

菜鸟教程 PostgreSQL 教程 | 菜鸟教程PostgreSQL 教程 PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 PostgreSQL 开发者把它念作 post-gress-Q-L。 PostgreSQL 的 Slogan 是 “世界上最先进的开源关系型数据库”。 参考内容&a…

新库上线 | CnOpenData中国汽车能源消耗量数据

中国汽车能源消耗量数据 一、数据简介 工业和信息化部组织制定的《乘用车燃料消耗量限值》强制性国家标准(GB19578-2021)于2021年7月1日起正式实施,该标准规定了燃用汽油或柴油燃料、最大设计总质量不超过3500kg的M1类车辆在今后一段时期的燃…

如何开启tiktok之旅

关于tiktok的用户规模,相比国内抖音而言的机会这里就不再多说了,我之所以研究tiktok,是因为有不少客户咨询了我们tiktok加速方案,我们自身是一家纯网络公司,只提供tiktok加速方案而已,但是遭不住需求量大。…

【设计模式】Java 的三种代理模式

文章目录 一、前言二、正文1、静态代理2、动态代理3、Cglib代理Spring中AOP使用代理 三、总结 一、前言 代理(Proxy)模式是一种结构型设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象。 这样做的好处是:可以在目标对…

什么是转化率优化(CRO)?网站转化率不高,可以看看这篇文章

你是否将人们带到你的网站,但只是让他们中的一小部分人完成了该页面的目标?你可以每天有成千上万的网站访问者到达。但如果你的网站没有设置成鼓励转换,你就不会说服网站访问者去做。这使得他们的整个访问几乎毫无价值,特别是如果…

MySQL-中间件mycat(三)

目录 🍁高可用方案 🍁安装配置 HAProxy 🍂安装 HAProxy 🍂启动验证 🍁配置 Keepalived 🍂安装 Keepalived 🍂修改配置文件 🍂启动验证 🍂测试高可用 🍁mycat …

经典transformer视觉模型总结

Vision Transformer 模型 ViT: AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 是 2020 年 Google 团队提出的将 Transformer 应用在图像分类的模型。 ViT 在 Transformer 架构的视觉模型的地位类似 ResNet 模型。因为其模型“简单”且效果好,可…

Doris单机版安装和初步使用

参考官方文档 https://doris.apache.org/zh-CN/docs/dev/get-starting/ 下载安装包 下载 - Apache Doris Index of /apache/doris/1.2/1.2.2-rc01 前置修改 #修改 /etc/security/limits.conf, 执行命令 vim /etc/security/limits.conf #添加以下 * soft nofile 204800 *…

【模电实验】基尔霍夫定律、叠加定理和戴维南定理验证实验

实验目的 验证基尔霍夫电流定律(KCL)和电压定律(KVL)加深对该定理的理解验证叠加定理,加深对该定理的理解验证戴维南定理,掌握有源二端口网络的开路电压,短路电流和入端等效电阻的测定方法通过实…

Pod探针解析及实战(k8s)

一、探针类型 1.1livenessProbe存活探针 用于判断容器是否存活(running状态),如果LivenessProbe探针探测到容器不健康,则kubelet杀掉该容器,并根据容器的重启策略做相应的处理。如果一个容器不包含LivenessProbe探针…

cmake创建windows工程编译环境

1.1 为什么需要CMake 你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 QMake ,微软的 MS NMake,BSD PMake,Makepp等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就…

ubuntu虚拟机增加磁盘后,虚拟机内部应该如何分配对应空间

fdisk -l 输入命令 parted /dev/sda 输入命令 unit s 设置Size单位,方便追加输入 输入命令 p free 查看详情 输入命令 resizepart 3 追加容量到sda3 输入命令 83886046s 空闲容量区间Free Space结束位置 输入命令 q 退出 输入命令 pvresize /dev/sda3 更新pv物…

【计算机网络】Linux 系统是如何收发网络包的?

【计算机网络】Linux 系统是如何收发网络包的? 文章目录 【计算机网络】Linux 系统是如何收发网络包的?网络模型Linux 网络协议栈Linux 接收网络包的流程Linux 发送网络包的流程总结 网络模型 为了使得多种设备能通过网络相互通信,和为了解决…

空格在科技类文章的排版中对于阅读体验的影响

© 2018 sparanoid © 2018-2023 Conmajia 第一部分援引自《中文文案排版指北》 研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的…

分布式锁-Redisson

分布式锁 1、分布式锁1.1 本地锁的局限性1.1.1 测试代码1.1.2 使用ab工具测试(单节点)1.1.3 本地锁问题演示(集群情况) 1.2 分布式锁实现的解决方案1.3 使用Redis实现分布式锁(了解即可)1.3.1 编写代码1.3.2 压测 1.4 使用Redisson解决分布式锁1.4.1 实现代码1.4.1 压测1.4.2 可…

DS1302

DS1302时钟芯片简介 DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整&a…

深度分析Netflix的投资价值,虽面临激烈竞争,但前景无限光明

来源:猛兽财经 作者:猛兽财经 公司介绍 Netflix(NFLX)是一家在视频流媒体领域非常成功的公司,运营着全球最大的视频流媒体订阅平台之一(目前已经有超过2.3亿的付费会员),它的商业模式也比较简单&#xff0…