QGridLayout布局得使用,等分布局 Qt5版本下得使用
栅格等分设置
由于Qt5版本这个布局没有设置有多少行,多少列得函数,我们先调用这个,就指定了由多少行和列,并成功等分
for (int i = 0; i< _rowGridlayNum; i++)
{
ui->gridLayout->setRowStretch(i,1);
}
for (int i = 0; i< _colGridlayNum; i++)
{
ui->gridLayout->setColumnStretch(i,1);
}
使用代码
void change_video(int index, int flag)
{
int row = 0; //行
int column = 0;//列
int needNumb = flag * flag;
if ((_videoMaxCount -2) < needNumb)
{
return;
}
for (int i = 0; i < needNumb; i++)
{
/* 将窗口插入到指定得布局格子中 16表格这么排列
** 0,1,2,3,
** 4,5,6,7,
** 8,9,10,11,
** 12,13,14,15
*/
MYDEBUG<<"add row"<<row<<" column "<<column;
ui->gridLayout->addWidget(_vecVideoMaskSig.at(i), row * (_rowGridlayNum/flag), column*(_colGridlayNum/flag),_rowGridlayNum/flag,_colGridlayNum/flag);
column++;
if (column == flag)
{
row++;
column = 0;
}
}
return;
}
case 1:
{
ui->gridLayout->addWidget(_vecVideoMaskSig.at(0),0,0,_rowGridlayNum,_colGridlayNum);
break;
}
case 2:
{
ui->gridLayout->addWidget(_vecVideoMaskSig.at(_videoMaxCount - 1),0,0,_rowGridlayNum/4,_colGridlayNum);
ui->gridLayout->addWidget(_vecVideoMaskSig.at(_videoMaxCount - 2),_rowGridlayNum - _rowGridlayNum/4,0,_rowGridlayNum/4,_colGridlayNum);
ui->gridLayout->addWidget(_vecVideoMaskSig.at(0),_rowGridlayNum/4,0,_rowGridlayNum/2,_colGridlayNum/2);
ui->gridLayout->addWidget(_vecVideoMaskSig.at(1),_rowGridlayNum/4,_colGridlayNum/2,_rowGridlayNum/2,_colGridlayNum/2);
break;
}
case 3:
{
ui->gridLayout->addWidget(_vecVideoMaskSig.at(0),0,_colGridlayNum/4,_rowGridlayNum/2,_colGridlayNum/2);
ui->gridLayout->addWidget(_vecVideoMaskSig.at(1),_rowGridlayNum/2,0,_rowGridlayNum/2,_colGridlayNum/2);
ui->gridLayout->addWidget(_vecVideoMaskSig.at(2),_rowGridlayNum/2,_colGridlayNum/2,_rowGridlayNum/2,_colGridlayNum/2);
ui->gridLayout->addWidget(_vecVideoMaskSig.at(_videoMaxCount - 1),0,0,_rowGridlayNum/2,_colGridlayNum/4);
ui->gridLayout->addWidget(_vecVideoMaskSig.at(_videoMaxCount - 2),0,_colGridlayNum - _colGridlayNum/4,_rowGridlayNum/2,_colGridlayNum/4);
break;
}
case 4:
{
change_video(0,2);
break;
}
布局使用
设置效果示例