QT的布局管理系统提供简单而强大的机制自动排列一个窗口中的部件、全部QWidget类子类的实例均可以使用布局管理器来管理位于其中的子部件,QWidget::setLayouyt()
函数能够在一个部件上应用布局管理器。一个部件应用布局管理器后会完成如下任务:c++
定位子部件ide
感知窗口默认大小函数
感知窗口最大最小布局
改变大小处理字体
当内容改变时自动更新ui
属性 | 说明 |
---|---|
layoutName | 如今所使用的布局管理器的名称 |
layoutLeftMargin | 设置布局管理器到界面左边界的距离 |
layoutTopMargin | 设置布局管理器到界面上边界的距离 |
layoutRightMargin | 右边界 |
layoutBottomMargin | 下边界 |
layoutSpacing | 布局管理器各个子部件间的距离 |
layoutStretch | 伸缩因子 |
layoutSizeConstraint | 设置大小约束条件 |
基本布局管理器使子布局在水平方向或垂直方向排成一列,将全部空间分红一行盒子,而后将每一个部件放入一个盒子中。this
栅格布局管理器将空间分隔成行和列,行和列的交叉处造成单元格,而后将部件放入肯定的单元格中。code
#include <QGridLayout> QGridLayout * layout = new QGridLayout; layout->addWidget(Btn, 0, 0, 1, 2); //添加部件,从第1行第1列开始,占据1行2列 QPushButton *pButton = new QPushButton(this); QLabel *pFirstPage= new QLabel(this); QLabel *pSecondPage = new QLabel(this); QLabel *pThirdPage = new QLabel(this); m_pStackedLayout = new QStackedLayout(); pButton->setText(QStringLiteral("点击切换")); pFirstPage->setText(QStringLiteral("一去丶二三里")); pSecondPage->setText(QStringLiteral("青春不老,奋斗不止!")); pThirdPage->setText(QStringLiteral("纯正开源之美,有趣、好玩、靠谱。。。")); // 添加页面(用于切换) m_pStackedLayout->addWidget(pFirstPage); m_pStackedLayout->addWidget(pSecondPage); m_pStackedLayout->addWidget(pThirdPage); QVBoxLayout *pLayout = new QVBoxLayout(); pLayout->addWidget(pButton, 0, Qt::AlignLeft | Qt::AlignVCenter); pLayout->addLayout(m_pStackedLayout); pLayout->setSpacing(10); pLayout->setContentsMargins(10, 10, 10, 10); setLayout(pLayout); // 链接切换按钮信号与槽 connect(pButton, &QPushButton::clicked, this, &MainWindow::switchPage); // 切换页面 void MainWindow::switchPage() { int nCount = m_pStackedLayout->count(); int nIndex = m_pStackedLayout->currentIndex(); // 获取下一个须要显示的页面索引 ++nIndex; // 当须要显示的页面索引大于等于总页面时,切换至首页 if (nIndex >= nCount) nIndex = 0; m_pStackedLayout->setCurrentIndex(nIndex); }
用来管理表格的输入部件及相关的标签,将它的子部件分为两列,左边是一些标签,右边是一些输入部件。orm
参考addRow()
继承
addLayout()
将一个子布局管理器放入主布局。
只要是继承自QWidget的类都有如下两个属性:
大小提示:siziHint()
保存部件的建议大小信息 ->经过函数可获取
最小大小提示:minimumSizeHint()
保存部件的建议最小大小信息 ->经过函数可获取
sizePolicy属性:
常量 | 描述 |
---|---|
QSizePolicy::Fixed | 只能使用sizeHint()提供的值,没法伸缩 |
QSizePolicy::Minimum | siziHint()提供的大小是最小的,部件能够被拉伸 |
QSizePolicy::Maximum | sizeHint()提供的是最大大小,部件能够被压缩 |
QSizePolicy::Preferred | sizeHint()提供的大小是最佳大小,能够拉伸能够压缩 |
QSizePolicy::Expanding | sizeHint()提供的是合适的大小,部件能够被压缩,不过更倾向于拉伸来得到更多的空间 |
QSizePolicy::MinimumExpanding | sizeHint()提供的大小是最小的,部件倾向于被拉伸来获取更多的空间 |
QSizePolicy::Ignored | sizeHint()的值被忽略,部件将尽量的被拉伸来获取更多的空间 |
关于伸缩因子(stretch factor)的概念:在代码中,能够在使用布局管理器的addWidget()函数添加部件时,在第二个参数指定伸缩因子。2,1
5个常量,相似于sizePolicy属性,在文档中查询使用。建议QLayout::SetNoConstraint 部件不被约束
一个窗口可能不少选项是扩充的,只在必要的时候显示出来,这是就可使用一个按钮,用来隐藏或显示多余的内容。要实现可扩展窗口,就得使用布局管理的特征,当子部件隐藏时,布局管理器自动缩小,当子部件从新显示时,布局管理器再次放大。
void MyWidget::on_pushButton_toggled(bool checked) { ui -> textEdit -> setVisible(checked); //按完按钮显示 } ui -> textEdit -> hide(); //隐藏