有时布局中的控制器不能完全显示,或者我希望子控制器能暂时占用更多的室内空间,最后我们需要使用另一个布局管理方法分割器。
当鼠标移动到子控件之间的间隔线时,计算机鼠标会变成以下样子
3.3.1 QSplitter1 childrenCollapsible 子控件能伸缩吗?
2 handleWidth 总宽度的分割线。
3 opaqueResize 尺寸是否立即改变。
true-在默认设置的前提下,当拖动分割线时,控件随分割线运行。false-拖动分割线时,只有移动分割线,松开电脑鼠标,控制器才能改变尺寸。4 orientation 切割方位,水平或垂直。
3.3.2 常用函数3.3.2.1 saveState()和restoreState()
维护系统状态和修复前的情况。当我们使用分割器时,许多控制器的大小会发生变化。当我们想修复某种状态时,我们可以使用这两个函数公式。
如果您想在软件再次打开后恢复正常的最后一个布局界面,您也可以使用这两个函数公式和隐私功能。我将在下面的例子中为您尝试。
3.3.2.2 sizes()和setSizes()
在分割器中获得和设置每个控件的间距或高度。
如果分割器是标准的,则每个控制器的总宽度将从左到右设置。如果分割器垂直,则每个控制器的高度将从上到下设置。
页面上的附加值被忽略了。假如页面上的值太小,结论不定义,但程序流程还是很好的。
分割器的整体规格影响不大。另一方面,根据尺寸相对净重(伸缩因素),所有附加/缺失的室内空间都分布在控件中。
若具体规格为0,则控件将看不见。
保存控件尺寸对策。换句话说,提醒值低于控件的较小规格应被提醒值所取代。
3.3.3 常见问题3.3.3.1 显隐控件
当一个控件被隐藏时,它的室内空间将配给其他控件。当它们再次显示时,它将被修复。
3.3.3.2 布局器与分割器进行比较
在QSplitter不能直接添加QLayout是的,主要是因为QSplitter承继自QFrame的,而QLayout承继自QObject和QLayoutItem是的,布局是一套优化算法,QSplitter是对话框控件,不能直接添加,只有布局才能添加子布局。
由于QSplitter窗户控制器完全可用setLayout()进而使QSplitter做为QLayout然后使用成员变量addWidget()取代。
3.3.4 实例新建工程SpliterWidget,类名SpliterWidget,父类为QWidget。
拖进2个QCheckBox,而且都使用属性checkable,checked
再拖进一个QTextEdit和QPushButton
spliterwidget.h
#ifndef SPLITERWIDGET_H#define SPLITERWIDGET_H#include <QWidget>#include <QSettings>namespace Ui {class SpliterWidget;}class SpliterWidget : public QWidget{ Q_O ECTpublic: explicit SpliterWidget(QWidget parent = 0); ~SpliterWidget();protected: ///重写关掉事情,之后再解读 void closeEvent(QCloseEvent e);private slots: void on_check_opaqueResize_toggled(bool checked); void on_check_collapsible_toggled(bool checked);private: Ui::SpliterWidget ui; QByteArray state; QSettings settings;};#endif // SPLITERWIDGET_Hspliterwidget.cpp
#include <QDebug>#include <QSettings>#include "spliterwidget.h"#include "ui_spliterwidget.h"SpliterWidget::SpliterWidget(QWidget parent) : QWidget(parent), ui(new Ui::SpliterWidget), settings("MySofts","SpliterWidget(34){ ui->setupUi(this); ///这里用于从注册表文件中输入分割器关闭前的情况 ///注册表文件的方式如下:HKEY_CURRENT_USERSoftwareMySoftsSpliterWidget if (settings.contains("splitterSizes")) ui->splitter->restoreState(settings.value("splitterSizes").toByteArray();;;qDebug() << "is restored"; else qDebug() << "first launch SpliterWidget"; }}SpliterWidget::~SpliterWidget(){ delete ui;}void SpliterWidget::closeEvent(QCloseEvent e)分割器状态在关闭时存储 settings.setValue("splitterSizes",ui->splitter->saveState(); QWidget::closeEvent(e);}void SpliterWidget::on_check_opaqueResize_toggled(bool checked){ ui->splitter->setOpaqueResize(checked);}void SpliterWidget::on_check_collapsible_toggled(bool checked){ //设置所有控件是否折叠,如果要设置控件,可以使用setCollapsible(); ui->splitter->setChildrenCollapsible(checked);}编译程序操作流程,调整分割器尺寸,关闭程序,再次打开程序,修复分割器关闭前的情况。
好了,今天就来说说分割器的内容。下次见。
大量干货知识,请关注微信微信官方账号:豆豆君,只要关心,就可以加豆豆君为大家创造。C Qt沟通工作组有利于讨论和学习。