Qt 之 QGridLayout

QGridLayout是比QVBoxLayout和QHBoxLayout的父类,所以更为灵活。

对于提供的几个重要成员函数的作用,手册里说的也不是很明白,自己动手测试了下,算是初步了解,记录下:

1、

void addWidget ( QWidget * widget, int row, int column, Qt::Alignment alignment = 0 )
void addWidget ( QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0

看源码中,两者最终都是使用由widget生成QGridBox对象,然后调用

d->add(b, fromRow, toRow, fromColumn, toColumn)

加入窗口,只不过上面的那个toRow == fromRow, toColumn==fromColumn



2、

int columnStretch ( int column ) const

void setColumnStretch ( int column, int stretch )

通过实验,我是这样理解stretch factor参数这个作用的:这个参数主要用来控制当窗口大小发生变化后,每个column新获取的空间。所以每个column都有自己的一个stretch值,会和其他行比较,然后计算出自己在窗口扩大或者缩小时获取或者丢失的空间。这里有个特殊条件,就是当初始化行大小的时候,如果并没有按照设定stretch设置各个column的大小,那么就会在缩小或者放大的时候先达到设定比列长度,然后各个行再按照设定的stretch获取新空间


测试代码:

//gridbutton.h

#include <QDialog>

class QPushButton;

class GridDialog : public QDialog
{
public:
    GridDialog(QWidget *parent = 0);

private:
    QPushButton *button1;
    QPushButton *button2;
};




//gridbutton.cpp

#include "griddialog.h"

GridDialog :: GridDialog(QWidget *parent) : QDialog(parent)
{
    button1 = new QPushButton(tr("button1"));
    button2 = new QPushButton(tr("button2"));

    QGridLayout *layout = new QGridLayout;

    layout->setColumnMinimumWidth(0, 100);
    layout->setColumnMinimumWidth(1, 10);

    layout->setHorizontalSpacing(100);
    layout->setVerticalSpacing(50);

    layout->setColumnStretch(0, 1);
    layout->setColumnStretch(1, 2);

    layout->addWidget(button1, 0, 0);
    layout->addWidget(button2, 1, 1, 1, 2);

    setLayout(layout);
}



//main.cpp
#include <QtGui>

#include "griddialog.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    GridDialog dialog;
    dialog.show();

    return app.exec();
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值