关于Qt-QGridLayout布局的简单使用

来源:互联网 发布:oppor9plusroot软件 编辑:程序博客网 时间:2024/04/30 03:12

分类:QT 1791人阅读 评论(0)收藏 举报

注:此文是从我的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的上下限限制,调整窗口大小,依然会出现之前设置的效果.


原创粉丝点击