第二十三课、布局管理器(二)------------------狄泰软件学院
一、布局管理器的比例系数
1、默认情况下以等比例的方式更新组件的大小
2、可以自定义组件大小更新时的比例系数
3、QBoxLayout中的比例系数设置
4、注意:组件的初始化大小是独立于布局管理器设置的,因此不能保证组件的大小始终符合比例系数的设置(比如刚运行时一样大小,主窗口变大后差异才显现出来)
二、QGridLayout布局管理器
1、以网格(二维)的方式管理界面组件
2、QGridLayout中的比例系数设置
3、布局管理器的嵌套
(1)、QGridLayout支持嵌套布局管理器成为其管理对象
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#ifndef WIDGET_H #define WIDGET_H #include <QtGui/QWidget> #include <QPushButton> class Widget : public QWidget { Q_OBJECT private: QPushButton Btn1; QPushButton Btn2; QPushButton Btn3; QPushButton Btn4; void QLayoutTest(); public: Widget(QWidget *parent = 0); ~Widget(); }; #endif // WIDGET_H
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include "Widget.h" #include <QVBoxLayout> Widget::Widget(QWidget *parent) : QWidget(parent), Btn1(this), Btn2(this), Btn3(this), Btn4(this) { QLayoutTest(); } void Widget::QLayoutTest() { Btn1.setText("Btn1"); Btn2.setText("Btn2"); Btn3.setText("Btn3"); Btn4.setText("Btn4"); Btn1.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//水平和垂直都随主窗口拓宽 Btn1.setMinimumSize(160,50); Btn2.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); Btn2.setMinimumSize(160,50); Btn3.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); Btn3.setMinimumSize(160,50); Btn4.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); Btn4.setMinimumSize(160,50); QGridLayout* layout = new QGridLayout(); layout->addWidget(&Btn1, 0, 0);//在第0行第0列 layout->addWidget(&Btn2, 0, 1); layout->addWidget(&Btn3, 1, 0); layout->addWidget(&Btn4, 1, 1); layout->setSpacing(10); layout->setRowStretch(0, 2);//第0行,两倍 setLayout(layout); } Widget::~Widget() { }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <QtGui/QApplication> #include "Widget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
三、小结
(1)、QGridLayout以网格的方式对组件进行管理
(2)、QGridLayout中的组件可以根据需要跨越多个网络
(3)、QBoxLayout和QGridLayout支持比例系数的概念
(4)、比例系数决定了组件大小的相对变化