Qt扫盲-QSplitter理论总结

QSplitter理论总结

  • 一、概述
  • 二、使用说明
    • 1. 添加子控件
    • 2. 内部控件大小和位置

一、概述

QSplitter允许用户通过拖动子部件之间的边界来控制子部件的大小。这个经常在我们使用的一些工具软件中最常使用
比如就像 QAssistant 里面的索引栏和内容直间,鼠标放在那个分界区,就会出一个图标,拖动那个栏,就可以移动左边的窗口大小。
Qt扫盲-QSplitter理论总结_第1张图片

还有就是比如说在 Qt Creator里面,也用了这个来调整大小。
Qt扫盲-QSplitter理论总结_第2张图片

二、使用说明

我们只需要单个QSplitter可以控制任意数量的 控件。

1. 添加子控件

QSplitter的典型用法是创建几个 控件并使用insertWidget()或addWidget()添加它们,没特殊指定位置就是在末尾添加新的控件。在QSplitter中已经有控件的话,我们可以用indexOf()、widget()和count()来访问QSplitter内的控件的位置、控件、个数等信息。

下面的例子将并排显示一个QListView, QTreeView和QTextEdit,因为有三个控件,就会有两个调整这些窗口的分隔栏:

      QSplitter *splitter = new QSplitter(parent);
      QListView *listview = new QListView;
      QTreeView *treeview = new QTreeView;
      QTextEdit *textedit = new QTextEdit;
      splitter->addWidget(listview);
      splitter->addWidget(treeview);
      splitter->addWidget(textedit);

代码运行出来就是这个:
Qt扫盲-QSplitter理论总结_第3张图片

2. 内部控件大小和位置

默认的QSplitter水平布局子节点(并排),也就是上面图那种排布,你可以使用 setOrientation(Qt::Vertical) 在垂直方向上布局,就像下面:

Qt扫盲-QSplitter理论总结_第4张图片

默认情况下,所有 控件都可以根据用户的意愿大小,大小介于 控件的minimumSizeHint()(或minimumSize())和maximumSize()之间。

默认情况下,QSplitter动态调整子节点的大小,也即是鼠标按下拖动的时候,控件大小也随着变,如果希望QSplitter只在调整大小操作结束时调整子节点的大小,也即是鼠标按下拖动的时候不调整大小,释放鼠标之后,也即是调整结束后才调整大小,用setOpaqueResize(false) 来设置。

控件之间的初始大小分布由初始大小与拉伸因子相乘确定。还可以使用 setSizes() 来设置所有 控件的大小。函数 sizes() 返回用户设置的大小。或者,我们以分别使用 saveState() 和restoreState() 从QByteArray保存和恢复 之前控件的大小状态,等下一次启动的时候把这个状态再恢复就好啦。

当我们 hide() 一个子节点控件时,它的空间将被分配给其他的子节点。当我们 show() 它时,它将被恢复。

注意:添加一个QLayout到一个QSplitter是不支持的( 无论是通过setLayout()或使QSplitter的父QLayout):其实在QSplitter 里默认使用了类似 QBoxLayout 的布局,就是水平垂直布局的,使用addWidget() 来完成的。

你可能感兴趣的:(#,▶,Qt扫盲,QSplitter,Qt布局分割器,QSplitter理论,布局,Qt)