Qt 垂直布局及嵌套 layout

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

本文讨论更多的是如何在一个 layout 中嵌套使用另外一个 layout,比如我们有这样一个需求,我们希望有三个按钮总在窗口的最左上角,无论窗口怎么拉伸或拖拽,按钮的位置都不动。那么我们就需要用到两个 layout 嵌套了。

大致的思路是在一个垂直的 layout 中嵌套一个水平的 layout,在水平的 layout 右侧设置一个弹簧,在垂直的 layout 下方设置一个弹簧,这样按钮就会一直在左上角了,表示图如下:

2015-06-17_112530

【实现代码】

#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);
}

 

说说你的想法