目录
1.前言
Qt布局器中和Stretch相关的方法有:
- addStretch
- setStretch
- insertStretch
- setStretchFactor
当然还包括它们对应的获取函数(如:stretch函数)。今天对这几个函数做个总结。
2.addStretch
如下代码为没调用addStretch函数:
QtWidgetsApplication2::QtWidgetsApplication2(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
auto pBtn1 = new QPushButton("btn1", this);
auto pBtn2 = new QPushButton("btn2", this);
auto pBtn3 = new QPushButton("btn3", this);
auto pLayout = new QHBoxLayout(this);
pLayout->addWidget(pBtn1);
pLayout->addWidget(pBtn2);
pLayout->addWidget(pBtn3);
setLayout(pLayout);
}
结果如下:
图1:没有addStretch函数
如下代码为调用addStretch函数:
QtWidgetsApplication2::QtWidgetsApplication2(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
auto pBtn1 = new QPushButton("btn1", this);
auto pBtn2 = new QPushButton("btn2", this);
auto pBtn3 = new QPushButton("btn3", this);
auto pLayout = new QHBoxLayout(this);
pLayout->addStretch(1);
pLayout->addWidget(pBtn1);
pLayout->addStretch(1);
pLayout->addWidget(pBtn2);
pLayout->addStretch(1);
pLayout->addWidget(pBtn3);
pLayout->addStretch(6);
setLayout(pLayout);
}
结果如下:
图2:调用了addStretch函数,按钮之间空隙没有用红色方框标记
图3:调用了addStretch函数,按钮之间空隙用红色方框标记
其中四个addStretch()函数用于在button按钮间增加伸缩量,伸缩量的比例为1:1:1:6,意思就是将button以外的空白地方(如:图3中红色方框所示)按设定的比例等分为9份并按照设定的顺序放入buttonLayout布局器中。如下代码:
3.setStretch
可以通过调用setStretch函数对布局器中指定索引窗体或QLayoutItem对象占据布局的区域比例进行更改。注意:如果指定的索引不存在,则调用setStretch函数设置的stretch值无效,布局器将采用默认的stretch值。如下代码:
QtWidgetsApplication2::QtWidgetsApplication2(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
auto pBtn1 = new QPushButton("btn1", this);
auto pBtn2 = new QPushButton("btn2", this);
auto pBtn3 = new QPushButton("btn3", this);
auto pLayout = new QHBoxLayout(this);
pLayout->setStretch(0, 1);
pLayout->addWidget(pBtn1);
pLayout->addStretch(1);
pLayout->addWidget(pBtn2);
pLayout->addStretch(1);
pLayout->addWidget(pBtn3);
pLayout->addStretch(6);
pLayout->setStretch(0, 10);
setLayout(pLayout);
}
第11行代码,因为调用setStretch时,布局器里啥都没有,是空的,故0索引值是无效值,此时setStretch无效。
第19行代码将布局器中索引为0的对象也即按钮pBtn1占据整个布局器的Stretch值设置为10,结果按钮pBtn1占据整个布局器区域明显比以前增大了,如下:
当将第19行setStretch函数的索引改为1,即设置按钮1和按钮2之间的空白区域占比为10,结果如下:
4.insertStretch
insertStretch和settStretch类似,不再赘述。
5.setStretchFactor
如下代码:
QtWidgetsApplication2::QtWidgetsApplication2(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
auto pBtn1 = new QPushButton("btn1", this);
auto pBtn2 = new QPushButton("btn2", this);
auto pBtn3 = new QPushButton("btn3", this);
auto pLayout = new QHBoxLayout(this);
pLayout->addWidget(pBtn1);
pLayout->addWidget(pBtn2);
pLayout->addWidget(pBtn3);
pLayout->setStretchFactor(pBtn1, 1);
pLayout->setStretchFactor(pBtn2, 2);
pLayout->setStretchFactor(pBtn3, 4);
setLayout(pLayout);
}
结果如下:
含义显而易见:就是pBtn1占据三个3按钮总长的1/7, pBtn2占据三个3按钮总长的2/7, pBtn3占据三个3按钮总长的4/7。
类似的函数还有QGridLayout类的setRowStretch、setColumnStretch,用法基本相同。