对qt 中gridlayout的一点注解

刚学qt,对它的gridlayout功能非常欣赏 -- 不用自己去考虑如何安放控件了,layout自动把它们放好。但是今天发现自己对layout的功能并没完全吃透。以前一直认为控件放到layout里面,只要动用了setColumnStretch和setRowStretch函数,控件的尺寸就被按比例缩放了。其实不然。看下面的代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QBrush>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QBrush brh(Qt::blue);
    mp_gLayout = new QGridLayout;
    mp_gLayout->setColumnStretch(0,1);
    mp_gLayout->setColumnStretch(1,1);
    mp_gLayout->setColumnStretch(2,1);
    mp_gLayout->setColumnStretch(3,1);
    mp_gLayout->setColumnStretch(4,1);
    mp_gLayout->setColumnStretch(5,1);
    mp_gLayout->setColumnStretch(6,1);
    mp_gLayout->setColumnStretch(7,1);
    mp_gLayout->setColumnStretch(8,1);
    mp_gLayout->setColumnStretch(9,1);

    mp_gLayout->setRowStretch(0,1);
    mp_gLayout->setRowStretch(1,1);
    mp_gLayout->setRowStretch(2,1);
    mp_gLayout->setRowStretch(3,1);
    mp_gLayout->setRowStretch(4,1);
    mp_gLayout->setRowStretch(5,1);
    mp_gLayout->setRowStretch(6,1);
    mp_gLayout->setRowStretch(7,1);
    mp_gLayout->setRowStretch(8,1);
    mp_gLayout->setRowStretch(9,1);

    mp_View = new QGraphicsView;
    mp_View->setBackgroundBrush(brh);

    mp_Scene = new QGraphicsScene;
    mp_Rect = new QGraphicsRectItem;

    mp_Scene->addItem(mp_Rect);

    mp_View->setScene(mp_Scene);
    <span style="color:#ff0000;">mp_gLayout->addWidget(mp_View, 3,3,4,4);
    qDebug("width = %d, viewWidth = %d", width(), mp_View->width());</span>
    ui->centralWidget->setLayout(mp_gLayout);

    mp_Rect->setRect(0,0,mp_View->width()/5,mp_View->height()/5);
    mp_View->show();
}

MainWindow::~MainWindow()
{
    delete mp_Rect;
    delete mp_Scene;
    delete mp_View;
    delete mp_gLayout;
    delete ui;
}
注意红色部分。第一句红语句已经把mp_View的尺寸变成了layout长宽的各 4/10。在下图里面也可以看到,蓝色区域确实是整个layout的40%。但是,图的最下方输出的debug信息表明:mp_View的宽度是640,甚至还大于layout的400!这说明,layout并没有改变mp_View的实际大小。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值