Qt布局管理

原地址:http://blog.csdn.net/lastsoup/article/details/7028243

设计软件中各个部件的位置排列,有两种方法:

1.设置widget的在父窗体中的坐标和大小

widget->move(x,y);

widget->resize(width,height);

//widget->setGeometry(QRect(x,y,width,height));

什么时候用:不想被布局约束,对这种控件可控制时

例如下面的可活动按钮

缺点:在遇到很多个部件时,一个个算坐标会很麻烦

部件不自动随父窗体的变化而变化(这里要重写resizeEvent事件算变化比例建立父子窗体之间的联系,而布局很容易做到)

 

2.布局管理Layout(可控制的部件不要使用布局中,一旦改变会影响到整体布局)

经常要用到的三个布局部件

QHBoxLayout水平布局

QVBoxLayout垂直布局

QGridLayout表格布局

 

————————————————————————————————

QHBoxLayout和QVBoxLayout用法相同

基本:

vlayout->addWidget(w1);

vlayout->addWidget(w2);

……

——————————————————————————————————

QGridLayout用法

layout->addWidget(widget,row,column,rowSpan,columnSpan);

layout->addLayout(layout,row,column,rowSpan,columnSpan);

(row,column):控件占据左上角的单元格位置

rowSpan:控件占据的行数

columnSpan:控件占据的列数(不写默认为1)

——————————————————————————————

控件随窗体伸缩

将布局与主窗体建立联系

layout=new QHBoxLayout(this);

或者this->setLayout(layout);

——————————————————————————————

layout->addStretch();可伸缩的空间

layout->setAlignment(Qt::AlignHCenter);//布局内控件水平居中 

layout->setSpacing(10);//控件间隔为10

layout->setMargin(10);//页边距为10

Qt设计器中spacer控件

以上在对控件位置调整时常用

 

——————————————————————————————————

结合SizePolicy属性控制布局管理中的控件的尺寸自适应方式

也就是控件随主窗体伸缩方式(可自行增大或缩小)

QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//可自行增大和收缩

Fixed:不能放大或缩小

Minimum:不能小于sizeHint尺寸,可放大(若设置了最大尺寸)

Maximum:不能放大,可缩小到允许的最小尺寸(若setMinimumSize(10,10)只能缩小到(10,10))

Preferred:控件的sizeHint是他的Hint,可以放大或缩小

 

————————————————————————————————————————————

比例因子的使用

例:布局中有左右两控件,右边比左边水平伸缩2倍

sizePolicy.setHorizontalStretch(1);
sizePolicy.setVerticalStretch(0);

left->setSizePolicy(sizePolicy);

sizePolicy.setHorizontalStretch(2);
sizePolicy.setVerticalStretch(0);

left->setSizePolicy(sizePolicy);

 

水平伸展比例(1,2)

垂直伸展比例(0,0)

——————————————————————————————————————————————————

布局顾名思义是对控件的位置的整体规划,每个控件之间都存在着位置关系,所以改变控件(移动、关闭)会破坏布局

——————————————————————————————————————————————————

结论:两种方法结合使用,应该可以应对大部分界面布局

本人是菜鸟,实践不多,如有错误欢迎指正

—————————————————————————————————————————————————

上述代码是为了理解布局使用,Qt设计器可实现

posted @ 2014-01-26 10:13  蓝夜  阅读(482)  评论(0编辑  收藏  举报