有两个函数可以用上:
QGridLayout::setColumnStretch(列码, 比例值);
QGridLayout::setRowStretch(行码, 比例值);
-> 下面是需要实现的比例效果图:
第一行和第二行是1:1,第一列和第二列是1:2
->具体使用方法见示例代码:
//main.cpp
#include<QApplication>
#include<QGridLayout>
#include<QList>
#include<QLabel>
#include<QPalette>
#include<QString>
voidsetLayout2p1(QGridLayout*,QWidget*,QList<QLabel*>*);
intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);
//初始化变量
QPalettemyPalette;
myPalette.setColor(QPalette::Window,QColor(0,255,0));
QList<QLabel*>*labelList=newQList<QLabel*>;
for(inti=0;i<3;++i){

QLabel*temp1=newQLabel("LabelNum:"+QString::number(i+1,10));
temp1->setAutoFillBackground(true);
temp1->setPalette(myPalette);
labelList->push_back(temp1);
}
QGridLayout*layout2p1=newQGridLayout();
QWidget*testWidget=newQWidget();
//布局处理
setLayout2p1(layout2p1,testWidget,labelList);
intresult=a.exec();
//程序指针delete处理
//先删除小的,嵌套在大窗体中的小窗体
while(!labelList->isEmpty()){
QLabel*temp=labelList->last();
labelList->removeLast();
deletetemp;
}
deletelabelList;//删除label列表
//然后删除窗口布局
deletelayout2p1;
//最后删除窗口
deletetestWidget;//运行widget的析构时,它会将关联的layout析构,还有放在这个layout内的窗体析构
returnresult;
}
voidsetLayout2p1(QGridLayout*layout2p1,QWidget*testWidget,QList<QLabel*>*labelList)
{
//放置窗口,设置窗口布局
testWidget->setLayout(layout2p1);
layout2p1->addWidget(labelList->at(0),0,0);
layout2p1->addWidget(labelList->at(1),1,0);
layout2p1->addWidget(labelList->at(2),0,1,2,1);
//列比第0列与第1列之比为1:2
layout2p1->setColumnStretch(0,1);
layout2p1->setColumnStretch(1,2);
//行比第0行与第1行之比为1:1
layout2p1->setRowStretch(0,1);
layout2p1->setRowStretch(1,1);
testWidget->show();
return;
}