注:此文是从我的QQ空间里移出来的,因为觉的用那么多空间,blog了太累了,它发表于 2010年01月07日 09:35
--------------------------------------------------------------------------------------------------------------------------------------------------------
本文转自:我朋友的QQ空间,如需要转载,请注明本地址
呃……在界面设计时一直困扰我的GridLayout布局今天算是搞定了.实际机上操作方式还是很简单.只是之前没有静下心来好好的使用.好了废话少说,进入正题吧。
关于网格布局的定义我就不在赘述了,对于编程的人来说那是侮辱智商的事情,接下来举一个简单的例子说明一下QGridLayout 的使用方式吧.
本次的用力描述是为一个QMainWindow窗口添加网格布局的两个并行的编辑框.即QLineEdit.
1.为MainWindow添加自定义布局:
首先需要注意的是,由于MainWindow自身就有布局,所以尽量不要直接添加自定义的布局界面,具体的方式为使用MainWindow自身封装的setCentralWidget(QWidget* widget)方法添加一个widget(一般使用QGroupBox就比较合适).然后在该widget里在添加布局setLayout.
2.为QGridLayout添加Widgets.
在QGridLayout添加widget方法--addWidget(QWidget , int , int , int , int)总,第一个int变量是widget的起始行数即(row),下一个是起始列数(即column),下一个是为所跨的行数,最后一个是所跨的列数.需要注意的是,在widget的起始行数不为0时,所跨行数最小不可以为0,最少必须是widget所在的行数.列数同样如此.否则控制台将报错,实际上的界面也运行不起来(直接就挂了).例如现在添加一个QLineEdit的起始行列数为(1 , 1),则所跨行数/列数不可再为(0 , 0),最小为(1 , 1).知道了这一点,接下来添加自己需要的效果的Widget就比较容易了.
以添加两个个QLineEdit为例:
我定义了三个QLineEidt的长度分别是6 , 3 .(这里的长度不是实际值,程序员都明白,添加到布局后布局会管理这些琐碎的东西的).而且都在起始行添加(即0行)
具体的执行语句就是:
QGroupBox* gBox = new QGroupBox;
this->setCentralWidget(gBox);
QGridLayout* layout = new QGridLayout(this);
layout->addWidget(new QLineEdit() , 0 , 0 , 0 , 5);
layout->addWidget(new QLineEdit() , 0 , 6 , 0 , 2);
this->resize(1000 , 600);
gBox->setLayout(layout);
这样,一个长度为6和长度为3的两个QLineEidt就会正常的显示出来了.
注意:大家可能也注意到了,这段可执行代码里可能this->resize(1000 , 600);是比较多余的.我承认,这个窗口大小的确设置的大了些.但如果不设置采用默认大小的话会出现显示的两个QLineEidt是等大小的.这个原因是qt的该布局自身设置了各自的相对最小显示.当窗口初始化的大小没有达到布局可以呈现的效果的时候,网格布局会对其做出自身的处理.这也是我在使用QGridLayout初期是遇到的比较恶心的一个现象了.不过如果没有对窗口做Size的上下限限制,调整窗口大小,依然会出现之前设置的效果.