Qt 布局学习

本文介绍了Qt中的布局管理,重点讲解了QBoxLayout的缩放因子和常用函数,以及QGridLayout的使用,包括QFormLayout的特性。Qt布局使子控件能够自适应,QBoxLayout支持水平和垂直排列,QGridLayout则提供网格布局,QFormLayout方便创建单表GUI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Qt可以使用layout对子控件进行布局,方便实现自适应布局。所有QWidget类可以通过调用QWidget::setLayout()设置布局。

Qt 布局相关类

  • QBoxLayout 水平/垂直排列
    • QHBoxLayout 水平排列布局
    • QVBoxLayout 垂直排列布局
  • QGridLayout 网格布局
  • QFormLayout 单表布局

QBoxLayout

子控件呈单行/单列布局,通过QBoxLayout::Direction指定方向。

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    QWidget *win = new QWidget();
    QBoxLayout *layout = new QBoxLayout(QBoxLayout::LeftToRight, win);
    layout->addWidget(new QPushButton("One"));
    layout->addWidget(new QPushButton("Two"));
    layout->addWidget(new QPushButton("Three"));
    layout->addWidget(new QPushButton("Four"));
    layout->addWidget(new QPushButton("Five"));
    win->show();

    return QApplication::exec();
}

QHBoxLayout 和 QVBoxLayout 仅是使用 LeftToRight 和 TopToBottom 创建一个 QBoxLayout。这两个类仅是方便使用。

缩放因子(stretch factor)

QBoxLayout 的一些成员函数有缩放因子参数,一般参数名是 stretch 。缩放因子决定 layout 在 水平/垂直 方向上的缩放时,子控件如何缩放。

  • 如果所有子控件的缩放因子都不大于0,则根据子控件的 QWidget::sizePolicy() 缩放;
  • 如果有子控件的缩放因子大于0,则根据缩放因子的比例分配扩大/缩小的空间。其中,缩放因子为0的子控件不会缩放(也就是说分配的变化空间为0)。
常用函数
  • addWidget 添加子控件到layout,可以设置缩放因子
  • addSpacing 添加指定大小的空白空间
  • addStretch 添加指定缩放因子的可缩放空白空间,最小宽度为0
  • setContentsMargins 设置外边距
  • setSpacing 设置子控件间距

QGridLayout

子控件呈网格布局,addWidget添加子控件时可以指定子控件的单元格下标和单元格占据的行数/列数。与 QBoxLayout一样,可以指定每一行/列的最高度/宽度和缩放因子。

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    QWidget *win = new QWidget();
    QGridLayout *layout = new QGridLayout(win);

    layout->addWidget(new QPushButton(), 0, 0);
    layout->addWidget(new QPushButton(), 0, 2);

    layout->addWidget(new QPushButton(), 1, 0, 1, 1);
    layout->addWidget(new QPushButton(), 1, 1, 1, 2);

    layout->addWidget(new QPushButton(), 2, 0, 1, 2);
    layout->addWidget(new QPushButton(), 2, 2, 1, 1);

    layout->addWidget(new QPushButton(), 3, 0, 1, 3);

    win->show();

    return QApplication::exec();
}

addRow第二、三参数指定改单元格的行下表和列下标。第三、四参数指定改单元格占用行数和列数。
上述例子布局如下:
在这里插入图片描述

QFormLayout

单表布局本质上是一个n行两列的网格布局,是QGridLayout便利类。单表布局也提供了一些便于创建单表GUI的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值