QT学习第九篇---布局管理

前言

对于一个完善的软件,布局管理是必不可少的。 无论是想要界面中部件有一个很整齐的排列,还是想要界面能适应窗口的大小变化,都要进行布局管理。Qt 提供了 QLayout 类及其子类来作为布局管理器,它们可以实现常用的布局管理功能。

 

回到顶部

水平、垂直、网格、表单布局

为窗口提供一个好布局的最佳方式是使用内置的布局管理器:QHBoxLayout、QVBoxLayout、QGridLayout 和 QFormLayout。这些类都派生自 QLayout,QLayout 又派生自 QObject(非 QWidget),布局窗口自动地把子窗口按照它们被构造地顺序进行布局。要生成更复杂的布局,可以在其它布局里面嵌入另一个布局。
 

(1)QHBoxLayout:把子窗口从左到右排列在一个水平行上。

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);

window->setLayout(layout);
window->show();

效果如下所示:

这里写图片描述

 

(2)QVBoxLayout:把子窗口从上到下排列在一个垂直列上。

...
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);
...

使用与 QHBoxLayout 区别不大。效果如下所示:

这里写图片描述

 

(3)QGridLayout:把子窗口排列在一个二维的网格中,窗口可占据多个单元格。

...
QGridLayout *layout = new QGridLayout;
layout->addWidget(button1, 0, 0);
layout->addWidget(button2, 0, 1);
layout->addWidget(button3, 1, 0, 1, 2);
layout->addWidget(button4, 2, 0);
layout->addWidget(button5, 2, 1);
...

对于 QGridLayout 有点不同,因为需要指定子控件的行和列的位置。第三个 QPushButton 占据 2 列。通过指定 QGridLayout:: addWidget() 的第五个参数为 2 来实现。效果如下所示:

这里写图片描述

 

(4)QFormLayout:把子窗口按照 “标签-输入框” 的形式排列在两列。

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QLineEdit *lineEdit1 = new QLineEdit();
QPushButton *button2 = new QPushButton("Two");
QLineEdit *lineEdit2 = new QLineEdit();
QPushButton *button3 = new QPushButton("Three");
QLineEdit *lineEdit3 = new QLineEdit();

QFormLayout *layout = new QFormLayout;
layout->addRow(button1, lineEdit1);
layout->addRow(button2, lineEdit2);
layout->addRow(button3, lineEdit3);

window->setLayout(layout);
window->show();

QFormLayout 将在一行上添加两个控件,通常是 QLabel 和 QLineEdit。在同一行中添加 QLabel 和 QLineEdit,将把 QLineEdit 设置为 QLabel 的伙伴。下面的代码将使用 QFormLayout 将三个 QPushButton 和相应 QLineEdit 排列起来。效果如下所示:

这里写图片描述

 

回到顶部

使用布局提示

当使用布局的时候,构建子控件的时候不需要指定 parent,布局将会自动的指定 parent(使用QWidget::setParent()),使它们成为安装了该布局的界面的子控件。

注意:布局中的控件是安装了该布局的界面的子控件,而非布局自身的,控件只能以控件作为parent,不能是布局。

也可以在布局中使用 addLayout() 来添加布局,内部的布局就会变成它的子布局。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值