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列,添加水平布局容器
效果图: