布局:layout,就是把各个控件放在合适的位置,占据适当大小的空间。
在QT中,使用布局器QLayout进行布局
(1)它为我们自动计算各个控件的大小和位置
(2)当父窗口调整时,它根据既定策略Policy来调整各个子窗口的大小和位置。
两个常用的QLayout子类: QHBoxLayout:横向布局、 QVBoxLayout:纵向布局
纵向布局 QVBoxLayout:每个Box的宽度信息被忽略,只关心他的高度。
例:
private:
QLineEdit * m_lineEdit;
QPlainTextEdit * m_textEdit;
在窗口构造函数中写:
//创建控件对象
m_lineEdit = new QLineEdit(this);
m_textEdit = new QPlainTextEdit(this);
//创建布局器
QVBoxLayout * layout = new QVBoxLayout(this);
layout->addWidget(m_lineEdit);
layout->addWidget(m_textEdit);
//使用布局器
this->setLayout(layout);
SizePolicy:用于描述一个Widget被resizing(调整大小)的时候,采用的策略
在SizePolicy类中定义了七种策略
Fixed:使用sizeHint,不能更大、不能更小
Minimum:不得小于sizeHint,可以更大,但不需要更大
Maximum:不得大于sizeHint,可以更小
Preferred:优先使用sizeHint,可大可小
Expanding:使用sizeHint,越大越好
MinimumExpanding:不得小于sizeHint,越大越好
lgnored:忽略sizeHint,越大越好
得到sizeHint和sizePolicy
由于采用纵向布局,我们只关心其高度和纵向的Policy
QSize sizeHint = m_lineEdit->sizeHint();
QSizePolicy pl = m_lineEdit->sizePolicy();
QSizePolicy::Policy vertical = pl.verticalPolicy();
改QLineEdit的Policy,
m_lineEdit->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding);
QWidget类有一个函数 virtual QSize sizeHind() const;
每一种Widget窗口类都需要重写这个函数。 作用:向布局器声明自己需要空间大小。
注:sizeHint和sizePolicy,都是提供给布局器的信息,布局器QLayout会根据这两个信息来决定这个窗口控件的实际尺寸。
布局参数
size hint:推荐大小
size policy:策略
stretch factor:拉伸因子
在同一个方向上,两个控件都有拉伸的需求(Expanding),那么布局器就需要合理分配他的需求
比如:A,B控件都是Expanding,stretch为1,1那么多余空间分配比例将是1:1
maximum size / minimum size:上限与下限
首先,QLayout根据控件的size hint,size policy,stretch factor来计算出大小
最后,保证其大小在[minimum,maximum]之间(多了一重限制)
在QT中,使用布局器QLayout进行布局
(1)它为我们自动计算各个控件的大小和位置
(2)当父窗口调整时,它根据既定策略Policy来调整各个子窗口的大小和位置。
两个常用的QLayout子类: QHBoxLayout:横向布局、 QVBoxLayout:纵向布局
纵向布局 QVBoxLayout:每个Box的宽度信息被忽略,只关心他的高度。
例:
private:
QLineEdit * m_lineEdit;
QPlainTextEdit * m_textEdit;
在窗口构造函数中写:
//创建控件对象
m_lineEdit = new QLineEdit(this);
m_textEdit = new QPlainTextEdit(this);
//创建布局器
QVBoxLayout * layout = new QVBoxLayout(this);
layout->addWidget(m_lineEdit);
layout->addWidget(m_textEdit);
//使用布局器
this->setLayout(layout);
SizePolicy:用于描述一个Widget被resizing(调整大小)的时候,采用的策略
在SizePolicy类中定义了七种策略
Fixed:使用sizeHint,不能更大、不能更小
Minimum:不得小于sizeHint,可以更大,但不需要更大
Maximum:不得大于sizeHint,可以更小
Preferred:优先使用sizeHint,可大可小
Expanding:使用sizeHint,越大越好
MinimumExpanding:不得小于sizeHint,越大越好
lgnored:忽略sizeHint,越大越好
得到sizeHint和sizePolicy
由于采用纵向布局,我们只关心其高度和纵向的Policy
QSize sizeHint = m_lineEdit->sizeHint();
QSizePolicy pl = m_lineEdit->sizePolicy();
QSizePolicy::Policy vertical = pl.verticalPolicy();
改QLineEdit的Policy,
m_lineEdit->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding);
QWidget类有一个函数 virtual QSize sizeHind() const;
每一种Widget窗口类都需要重写这个函数。 作用:向布局器声明自己需要空间大小。
注:sizeHint和sizePolicy,都是提供给布局器的信息,布局器QLayout会根据这两个信息来决定这个窗口控件的实际尺寸。
布局参数
size hint:推荐大小
size policy:策略
stretch factor:拉伸因子
在同一个方向上,两个控件都有拉伸的需求(Expanding),那么布局器就需要合理分配他的需求
比如:A,B控件都是Expanding,stretch为1,1那么多余空间分配比例将是1:1
maximum size / minimum size:上限与下限
首先,QLayout根据控件的size hint,size policy,stretch factor来计算出大小
最后,保证其大小在[minimum,maximum]之间(多了一重限制)