布局管理主要用于在窗体中摆放每一个窗口部件,以及自动调整窗口部件在窗体中的大小和位置。 Qt提供了多个用于摆放窗口部件的类: QHBoxLayout 、 QVBoxLayout 、 QGridLayout 、 QStackedLayout 。
其中前 3种是最重要的布局管理器,其用法也很简单,使用 addWidget()将需要摆放的窗口部件添加到 Layout里面。 Layout本身也可以通过 addLayout()作为一个整体添加到上层 Layout里面。 addStretch()可以添加一个伸缩器用于占满空白空间。 QGridLayout 的用法要稍微麻烦些。他基于一个二维单元格,每个窗口部件可以占据一个或几个单元格。左上角的单元格为 (0, 0)。 QGridLayout :: addWidget()的用法是: layout->addWidget(widget, row, column, rowSpan, columnSpan); 其中 row和 column是窗口部件所占据的位置, rowSpan和 columnSpan是该部件所占用的行数和列数。
具体用法:
QHBoxLayout 和 QVBoxLayout :
label = new QLabel ( tr( "Label" ));
editor = new QLineEdit ( this );
label1 = new QLabel ( tr( "Label1" ));
editor1 = new QLineEdit ( this );
QHBoxLayout * layout1 = new QHBoxLayout ;
layout1-> addWidget( label);
layout1-> addWidget( editor);
QVBoxLayout * layout1 = new QVBoxLayout ;
layout1-> addWidget( label);
layout1-> addWidget( editor);
QVBoxLayout * mainLayout = new QVBoxLayout ;
mainLayout-> addLayout( layout1);
mainLayout-> addStretch();
mainLayout-> addLayout( layout2);
setLayout( mainLayout);
只需要将窗口部件按顺序添加即可,在所有需要使用 setLayout() 将处于最顶端的 Layout 设置到当前的窗体。
QGridLayout :
QGridLayout * leftLayout = new QGridLayout ;
leftLayout-> addWidget( subfoldersCheckBox, 2 , 0 , 1 , 2 );
QGridLayout 在添加窗口部件是需要指明位置和所占范围,其他都与 QHBoxLayout 和 QVBoxLayout 一样。
QStackedLayout 可以对一组子窗口部件进行摆放,以及对他们进行“分页”,一次只显示其中的一个,而将其他的子窗口部件或者分页隐藏起来。分页从 0 开始编号,可以使用 setCurrentIndex() 来设置当前显示的分页,通过 indexOf() 获取子窗口部件的页号。
可以用于布局管理的类还有:
QSplitter : 用于切分窗口
QMdiArea : 在多文档应用程序中,可作为中央窗口部件
QScrollArea : 提供了一个可以滚动的视口和两个滚动条