Qt 中垂直布局的 layout 是 QVBoxLayout 类,他的功能用发与 QHBoxLayout 完全一致,你只需将我们上一篇文章中的所有 QHBoxLayout 替换成 QVBoxLayout 就可以正常运行了。只不过一个是水平布局,一个是垂直布局。

本文讨论更多的是如何在一个 layout 中嵌套使用另外一个 layout,比如我们有这样一个需求,我们希望有三个按钮总在窗口的最左上角,无论窗口怎么拉伸或拖拽,按钮的位置都不动。那么我们就需要用到两个 layout 嵌套了。 大致的思路是在一个垂直的 layout 中嵌套一个水平的 layout,在水平的 layout 右侧设置一个弹簧,在垂直的 layout 下方设置一个弹簧,这样按钮就会一直在左上角了,表示图如下: 2015-06-17_112530

【实现代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "cwidget.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>

CWidget::CWidget(QWidget *parent) : QWidget(parent)
{
// 垂直 Layout
QVBoxLayout* mainLayout = new QVBoxLayout(this);
// 水平 Layout
QHBoxLayout* layout = new QHBoxLayout;

// 水平 Layout 增加控件
layout->addWidget(new QPushButton("button1"));
layout->addWidget(new QPushButton("button2"));
layout->addWidget(new QPushButton("button3"));
// 水平 Layout 增加弹簧
layout->addStretch(1);

// 将水平 Layout 添加到垂直 Layout
mainLayout->addLayout(layout);
// 设置垂直 Layout 弹簧
mainLayout->addStretch(1);
}