一、目前的GUI开发方式:绝对定位
1、直接在像素级指定各个组件的位置和大小
(1)、void Qwidget::move(int x, int y)
(2)、void Qwidget::resize(int x, int y)
2、问题:组件的大小和位置无法自适应父窗口的变化
二、布局管理器
1、Qt提供相关的类对界面组件进行布局管理
(1)、能够自动排列窗口中的界面组件
(2)、窗口变化后自动更新界面组件的大小
2、QLayout类
(1)、QLayout是Qt中布局管理器的抽象基类
(2)、通过继承QLayout实现了功能各异且互补的布局管理器
(3)、Qt中可以根据需要自定义布局管理器
(4)、布局管理器不是界面部件,而是界面部件的定位策略
3、QBoxLayout布局管理器
(1)、以水平或者垂直的方式管理界面组件
4、布局管理器可以互相嵌套,形成更加复杂的布局形式
(1)、布局嵌套几乎可以完成所有常用的界面布局
(2)、自定义布局类可以达到个性化界面布局的效果
#ifndef WIDGET_H #define WIDGET_H #include <QtGui/QWidget> #include <QPushButton> class Widget : public QWidget { Q_OBJECT private: QPushButton Btn1; QPushButton Btn2; QPushButton Btn3; QPushButton Btn4; void QLayoutTest(); public: Widget(QWidget *parent = 0); ~Widget(); }; #endif // WIDGET_H
#include "Widget.h" #include <QVBoxLayout> Widget::Widget(QWidget *parent) : QWidget(parent), Btn1(this), Btn2(this), Btn3(this), Btn4(this) { QLayoutTest(); } void Widget::QLayoutTest() { Btn1.setText("Btn1"); Btn2.setText("Btn2"); Btn3.setText("Btn3"); Btn4.setText("Btn4"); Btn1.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//水平和垂直都随主窗口拓宽 Btn1.setMinimumSize(160,50); Btn2.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); Btn2.setMinimumSize(160,50); Btn3.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); Btn3.setMinimumSize(160,50); Btn4.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); Btn4.setMinimumSize(160,50); QVBoxLayout* vlayout1 = new QVBoxLayout(); QVBoxLayout* vlayout2 = new QVBoxLayout(); QHBoxLayout* hlayout = new QHBoxLayout(); vlayout1->addWidget(&Btn1); vlayout1->addWidget(&Btn2); vlayout2->addWidget(&Btn3); vlayout2->addWidget(&Btn4); hlayout->addLayout(vlayout1);//布局管理器的嵌套 hlayout->addLayout(vlayout2);//注意这里是addLayout hlayout->setSpacing(10);//间距大小 setLayout(hlayout);//设置布局管理器 } Widget::~Widget() { }
#include <QtGui/QApplication> #include "Widget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
三、小结
(1)、绝对定位的布局方式无法自适应窗口的变化
(2)、Qt提供相关的类对界面组件进行布局管理
(3)、Qt预定义了功能各异且互补的布局管理器
(4)、布局管理器能够互相嵌套形成复杂的布局