Qt布局容器2

QGridLayout表格布局容器

    setMinimumSize(600,400);
    constexpr int sz = 12;
    QString clrs[sz]{
        "red","green","blue","yellow","pink","lightGray",
        "LightGreen","slateBlue","darkgoldenrod","darkcyan","chartreuse","gold"
    };
    QVector<QWidget*> labels;
    for(int i = 0; i<sz ;++i)
    {
        QLabel* label = new QLabel(QString::number(i+1));
        label->setFont(QFont("新宋体",22));

        QString ss = "background-color:"+clrs[i];
        label->setStyleSheet(ss);
        labels.push_back(label);
       // h->addWidget(widget);
    }

    QGridLayout* mainLayout = new QGridLayout(this);
    setLayout(mainLayout);
    mainLayout->setColumnStretch(0,10);//0列占比10
    mainLayout->setColumnStretch(1,2);//1列占比2
    mainLayout->setRowStretch(0,10);//0行占比10
    mainLayout->setRowStretch(1,2);//1行占比2
    mainLayout->addWidget(labels[0],0,0);//0行0列
    mainLayout->addWidget(labels[1],0,1,2,1);//起始位置0行1列,占据2行1列
    mainLayout->addWidget(labels[2],1,0);//1行0列

表格定义为2行2列:

0列占比10,1列占比2
0行占比10,1行占比2

addWidget添加了3个QLabel进去

labels[0]放在了0行0列位置,其他参数使用默认值
labels[1]放在0行1列位置,第3个参数设置占据2个行数,第四个参数设置占据1个列数
labels[2]放在了1行0列的位置,其他参数默认值

效果图:
在这里插入图片描述

不仅可以设置行列比例,还可以指定占据行列数,非常灵活
除此外,还可以通过设置指定窗口部件的最大最小尺寸来灵活布局

加上这两句代码,看一下效果

    labels[1]->setMinimumWidth(180);
    labels[1]->setMaximumWidth(230);

在这里插入图片描述
设置了labels[1]的最小宽度,能够固定labels[1]的最小可见区域
设置了labels[1]的最大宽度,能够限制拉伸宽度上限,满足想要的效果

表格布局也可以使用addLayout方法嵌套其它布局容器
    QVector<QWidget*> labels;
    for(int i = 0; i<sz ;++i)
    {
        QLabel* label = new QLabel(QString::number(i+1));
        label->setFont(QFont("新宋体",22));

        QString ss = "background-color:"+clrs[i];
        label->setStyleSheet(ss);
        labels.push_back(label);
       // h->addWidget(widget);
    }

    QHBoxLayout* lay = new QHBoxLayout();
    lay->addWidget(labels[2]);
    lay->addWidget(labels[3]);
    lay->addWidget(labels[4]);

    QGridLayout* mainLayout = new QGridLayout(this);
    setLayout(mainLayout);
    mainLayout->setColumnStretch(0,10);//0列占比10
    mainLayout->setColumnStretch(1,2);//1列占比2
    mainLayout->setRowStretch(0,10);//0行占比10
    mainLayout->setRowStretch(1,2);//1行占比2
    mainLayout->addWidget(labels[0],0,0);//0行0列
    mainLayout->addWidget(labels[1],0,1,2,1);//起始位置0行1列,占据2行1列
    mainLayout->addLayout(lay,1,0);//1行0列

    labels[1]->setMinimumWidth(180);
    labels[1]->setMaximumWidth(230);
创建了一个水平布局容器,向水平布局容器添加了3个QLabel

mainLayout->addLayout(lay,1,0);//在1行0列,添加水平布局容器

效果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值