Chinaunix首页 | 论坛 | 博客
  • 博客访问: 204931
  • 博文数量: 70
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 412
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-30 11:07
文章分类

全部博文(70)

文章存档

2014年(68)

2013年(2)

我的朋友

分类: C/C++

2014-02-21 15:38:56

QGridLayout 的使用方式
http://blog.csdn.net/jing51536/article/details/6055090

  本次的用力描述是为一个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的上下限限制,调整窗口大小,依然会出现之前设置的效果.


阅读(6529) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~