窗口的布局
来源:互联网 发布:网购电影票软件 编辑:程序博客网 时间:2024/06/05 03:11
一、如何布局
布局,layout,就是把各个控件放在合适的位置,占据适当大小的空间。
在QT中,使用布局器QLayout进行布局
1.它为我们自动计算各个控件的大小和位置
2.当父窗口调整是,它根据既定策略Policy来调整各个子窗口的大小和位置。
两个常用的QLayout子类:
QHBoxLayout:横向布局
QVBoxLayout:纵向布局
例1创建一个界面:上面是一个单行文本框,下面是一个文本编辑框
#ifndef MYWIN_H
#define MYWIN_H
#include <QWidget>
#include<QVBoxLayout>
#include<QLineEdit>
#include<QPlainTextEdit>
class MyWin:public QWidget
{
Q_OBJECT
public:
MyWin(QWidget* parent);
~MyWin();
private:
QLineEdit* m_lineEdit;
QPlainTextEdit* m_textEdit;
}
#include "MyWin.h"
MyWin::MyWin(QWidget* parent):QWidget(parent)
{
//创建控件对象
m_lineEdit=new QLineEdIt(this);
m_textEdit=new QPlainTextEdit(this);
//创建布局器
QVBoxLayout* layout=new QVBoxLayout(this);
layout->addWidget(m_lineEdit);
layout->addWidget(m_textEdit);
//使用布局器
this->setLayout(layout);
}
MyWin::~MyWin()
{}
#include <QtGui/QApplication>
#include "MyWin.h"
int main(int argc,char * argv[])
{
QApplication a(argc,argv);
MyWin a(NULL);
w.resize(400,300);//设置大小
w.move(100,100);//指定位置
w.show();
return a.exec();
}
二、窗口大小调整的策略
SizePolicy:用于描述一个Widget被resizing(调整大小)的时候
在QSizePolicy类中定义了七种策略
Fixed:使用sizeHint,不能更大不能更小
Minimum:不得小于sizeHint,可以更大,但不需要更小
Maximum:不得大于sizeHint,可以更小
Preferred:优先使用sizeHint,越大越好
Expanding:使用sizeHint,越大越好
MinimumExpanding:不得小于sizeHint,越大越好
lgnore:忽略sizeHint,越大越好
相关的函数
//获取当前的policy
QSizePolicy QWidget::sizePolicy()const
//设置新的policy
void setSizePolicy(QSizePolicy)
void setSizePolicy(QSizePolicy::Policy horizontal,QSizePolicy::Policy::Policy vertical)
SizeHint 是有QWidget类有函数 virtual QSizesizeHint()const;来得到
每一种Widget窗口都需要重写这个函数
作用:向布局器声明自己需要的空间大小
注意:sizeHint和sizePolicy,都是提供给布局器的信心,布局器QLayout会根据这两个信息来决定这个窗口控件的实际尺寸。
例2:把例1的程序使用sizeHint和sizePolicy进行调整
#include "MyWin.h"
MyWin::MyWin(QWidget *parent): QWidget(parent){// 创建控件对象m_lineEdit = new QLineEdit(this);m_textEdit = new QPlainTextEdit(this);// 观察sizeHint的值,sizePolicy的值QSize sh = m_lineEdit->sizeHint();//得到推荐的大小QSizePolicy p = m_lineEdit->sizePolicy();.//得到policy的类QSizePolicy::Policy vp = p.verticalPolicy();//得到纵向的policyQSize sh2 = m_textEdit->sizeHint();QSizePolicy p2 = m_textEdit->sizePolicy();QSizePolicy::Policy vp2 = p2.verticalPolicy();// 设置上面的LineEdit的Policy// m_lineEdit->setSizePolicy(QSizePolicy::Fixed,// QSizePolicy::Expanding);//横向Fixed纵向Expanding// 创建布局器QVBoxLayout* layout = new QVBoxLayout(this);layout->addWidget(m_lineEdit); // 将第一个box添加到布局器layout->addWidget(m_textEdit); // 将多行文本框添加到布局器// ʹ使用布局器this->setLayout(layout);}MyWin::~MyWin(){}
例3:一个界面中可以使用多个布局器先横向使用一个再纵向使用一个#include "MyWin.h"#include <QHBoxLayout>#include <QVBoxLayout>MyWin::MyWin(QWidget *parent): QWidget(parent){m_button = new QPushButton(this);m_button->setText("OK");m_lineEdit = new QLineEdit(this);m_textEdit = new QPlainTextEdit(this);QHBoxLayout* layout1 = new QHBoxLayout(); //先创建一个横向布局器layout1->addWidget(m_lineEdit);layout1->addWidget(m_button);//把第一行的单行文本框和按键用横向布局器布局QVBoxLayout* layout2 = new QVBoxLayout();layout2->addLayout(layout1); // 把layout1添加到纵向布局器中layout2->addWidget(m_textEdit);this->setLayout(layout2);}MyWin::~MyWin(){
}如果用可视化布局,可以通过打散和组合按钮来实现布局
三、布局参数
sizeHint :推荐大小
sizepolicy :策略
stretch factor :拉伸因子
maximum size/minimum size:上限与下限
- 窗口的布局
- 窗口的布局
- 关于窗口布局的笔记
- qt窗口部件的布局
- QT -- 窗口部件的布局
- 布局、窗口
- Eclipse的SWT窗口布局经验
- c# 窗口布局的一个问题
- Android改变窗口标题栏的布局
- Android改变窗口标题栏的布局
- Android改变窗口标题栏的布局
- Android改变窗口标题栏的布局
- vs2008中窗口布局的恢复
- QT 学习笔记 窗口控件的布局
- QT入门笔记--窗口部件的布局
- Android 改变窗口标题栏的布局
- Qt获取设置窗口的布局管理器
- 如何恢复VS2015窗口的默认布局
- 读取jar包所在目录和jar包内文件
- Struts1和Struts2的区别和对比:
- 前端可视化编程:liveReload安装,sublime 3
- spring中使用字符串注入collection,如set/array
- Error: Spawn SVN ENOENT
- 窗口的布局
- 使用WebView加载本地网页
- MQTT_笔记
- 来说说(Facade)外观模式
- 关于怎么在mysql中执行*.sql文件
- 整理ING
- SonarQube的安装
- fabric下载文件
- Redis:ServiceStack.Redis之IRedisClient