QT开发(二十一)——QT布局管理器
一、布局管理器简介
QT中使用绝对定位的布局方式无法自适应窗口的变化。
QT中提供了对界面组件进行布局管理的类,用于对界面组件进行管理,能够自动排列窗口中的界面组件,窗口大小变化后自动更新界面组件的大小。
QLayout是QT中布局管理器的抽象基类,通过对QLayout的继承,实现了功能各异且互补的布局管理器。
布局管理器不是界面组件,而是界面组件的定位策略。
任意容器类型的组件都可以指定布局管理器。
同一个布局管理器管理中的组件拥有相同的父组件,在设置布局管理器的同时已经隐式指定了父子关系。
二、QBoxLayout布局管理器
QBoxLayout以垂直或水平的方式管理界面组件。
QBoxLayout有两个子类:QHBoxLayout和QVBoxLayput。
1、QBoxLayout使用
A、QVBoxLayout使用void Widget::VBoxLayout()
{
QVBoxLayout *vLayout = new QVBoxLayout();
//设置组件间隔
vLayout->setSpacing(20);
//设置组件的标签
button1.setText("button1");
button2.setText("button2");
button3.setText("button3");
button4.setText("button4");
//设置每个组件的尺寸策略
button1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
button2.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
button3.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
button4.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
//设置组件的最小尺寸
button1.setMinimumSize(60,30);
button2.setMinimumSize(60,30);
button3.setMinimumSize(60,30);
button4.setMinimumSize(60,30);
//添加组件到布局管理器
vLayout->addWidget(&button1);
vLayout->addWidget(&button2);
vLayout->addWidget(&button3);
vLayout->addWidget(&button4);
//设置窗口的布局管理器
setLayout(vLayout);
}
B、QHBoxLayout使用void Widget::HBoxLayout()
{
QHBoxLayout *hLayout = new QHBoxLayout();
//设置组件间隔
hLayout->setSpacing(20);
//设置组件的标签
button1.setText("button1");
button2.setText("button2");
button3.setText("button3");
button4.setText("button4");
//设置每个组件的尺寸策略
button1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
button2.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
button3.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
button4.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
//设置组件的最小尺寸
button1.setMinimumSize(60,30);
button2.setMinimumSize(60,30);
button3.setMinimumSize(60,30);
button4.setMinimumSize(60,30);
//添加组件到布局管理器
hLayout->addWidget(&button1);
hLayout->addWidget(&button2);
hLayout->addWidget(&button3);
hLayout->addWidget(&button4);
//设置窗口的布局管理器
setLayout(hLayout);
}
2、QBoxLayout嵌套使用
布局管理器可以相互嵌套,形成复杂的布局管理方式。
QBoxLayout布局管理器的嵌套使用实例如下:
void Widget::HVBoxLayout()
{
QHBoxLayout *hLayout1 = new QHBoxLayout();
QHBoxLayout *hLayout2 = new QHBoxLayout();
//button1、buuton2使用水平布局管理器hLayout1管理
hLayout1->setSpacing(20);
button1.setText("button1");
button2.setText("button2");
button1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
button2.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
button1.setMinimumSize(60,30);
button2.setMinimumSize(60,30);
hLayout1->addWidget(&button1);
hLayout1->addWidget(&button2);
//button3、buuton4使用水平布局管理器hLayout2管理
hLayout2->setSpacing(20);
button3.setText("button3");
button4.setText("button4");