第22课 布局管理器(一)
2018-03-18 15:32
106 查看
1、目前的GUI开发方式:绝对定位
1.1、 直接在像素级指定各个组件的位置和大小1.1.1、 void Qwidget::move(int x, int y)
1.1.2、 void Qwidget::resize(int x, int y)
1.2、 问题:组件的大小和位置无法自适应父窗口的变化
2、布局管理器
2.1、 Qt提供相关的类对界面组件进行布局管理2.1.1、 能够自动排列窗口中的界面组件
2.1.2、 窗口变化后自动更新界面组件的大小
2.2、 QLayout类
2.2.1、 QLayout是Qt中布局管理器的抽象基类
2.2.2、 通过继承QLayout实现了功能各异且互补的布局管理器
2.2.3、 Qt中可以根据需要自定义布局管理器(一般不要自定义布局管理器)
2.2.4、 布局管理器不是界面部件,而是界面部件的定位策略
2.3、 QBoxLayout布局管理器
2.3.1、 以水平或者垂直的方式管理界面组件
2.4、布局管理器可以互相嵌套,形成更加复杂的布局形式
2.4.1、 布局嵌套几乎可以完成所有常用的界面布局
2.4.2、 自定义布局类可以达到个性化界面布局的效果
QLayoutManaget.h
#ifndef WIDGET_H#define WIDGET_H#include <QtGui/QWidget>#include <QPushButton>class Widget : public QWidget{ Q_OBJECTprivate: QPushButton btn1; QPushButton btn2; QPushButton btn3; QPushButton btn4; void QLayoutTest(); public: Widget(QWidget *parent = 0); ~Widget();};#endif // WIDGET_H
QLayoutManaget.cpp
#include "widget.h"#include <QVBoxLayout>#include <QHBoxLayout>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); QHBoxLayout* hlayout1 = new QHBoxLayout(); QHBoxLayout* hlayout2 = new QHBoxLayout(); QVBoxLayout* vlayout = new QVBoxLayout(); hlayout1->addWidget(&btn1); hlayout1->addWidget(&btn2); //添加控件。 hlayout2->addWidget(&btn3); hlayout2->addWidget(&btn4); vlayout->addLayout(hlayout1);//布局管理器的嵌套 vlayout->addLayout(hlayout2);//注意这里是addLayout vlayout->setSpacing(20);//设置这个垂直布局中子布局之间的间距大小 this->setLayout(vlayout);//设置布局管理器}Widget::~Widget(){ }
main.cpp
#include <QtGui/QApplication>#include "widget.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; w.show(); return a.exec();}
3、小结
3.1、 绝对定位的布局方式无法自适应窗口的变化3.2、 Qt提供相关的类对界面组件进行布局管理
3.3、 Qt预定义了功能各异且互补的布局管理器
3.4、 布局管理器能够互相嵌套形成复杂的布局
相关文章推荐
- 新概念英语4册第22课
- Qt学习——布局管理器QLayout类
- Qt使用布局管理器实现扩展对话框
- android学习日记12--布局管理器
- 布局管理器FlowLayout
- 第22课:<img>标签、表单标签(form)
- 布局管理器——相对布局
- 破解教程 第22课 一个新的破解方法---OllyDbg破解法
- 布局管理器
- 布局管理器面面观
- 布局管理器BorderLayout、FlowLayout、GridLayout
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器
- 布局管理器——总结
- 布局管理器
- Java AWT编程 布局管理器(一)FlowLayout
- Android【布局管理器】——线性布局LinearLayout
- 第25天 JFrame、JoptionPanel对话框、布局管理器、非容器组件、菜单组件、事件