Qt布局上控件添加和删除

论坛 期权论坛 脚本     
匿名技术用户   2020-12-29 23:10   11   0

Qt中布局管理器是十分好用的,简直是懒人最佳搭档!但是当界面控件需要根据实时数据进行增删时,往往不得其法,在这里列一下布局上控件的增删,已备后续使用。


1.遍历水平/垂直布局内控件

for(int col =2; col< ui->horizontalLayout->count() -1; col++)

{

QLayoutItem *Item = ui->horizontalLayout->itemAt(col);

if(Item)

{

QCheckBox *checkbox = qobject_cast<QCheckBox*>(Item->widget());

……

}

}

}


2.遍历栅格布局内控件

for(int row =0; row< ui->gridLayout->rowCount(); row++)//

{

for(int col =2; col< ui->gridLayout->columnCount() -1; col++)

{//

QLayoutItem *Item = ui->gridLayout->itemAtPosition(row,col);

if(Item)

{

QCheckBox *checkbox = qobject_cast<QCheckBox*>(Item->widget());

……

}

}

}

}


3.移除布局中所有控件,并保存

QVector<QCheckBox*> vecBox;

int rowCount = ui->gridLayout->rowCount();

int colCount = ui->gridLayout->columnCount();

for(int row =0; row< ui->gridLayout->rowCount(); row++)

{//获取所有checkbox并移除

for(int col =2; col< ui->gridLayout->columnCount() -1; col++)

{//遍历所有行第二列开始所有控件,具体内容可根据实际界面确定

QLayoutItem *Item = ui->gridLayout->itemAtPosition(row,col);

if(Item)

{

QCheckBox *checkbox = qobject_cast<QCheckBox*>(Item->widget());

vecBox.push_back(checkbox);//控件保存

ui->gridLayout->takeAt(ui->gridLayout->indexOf(checkbox));//移除

//注意:此处移除操作不是实际删除,若要直接删除需要手动delete

}

}

}

//…… 处理vecDev


4.向布局内动态添加控件

QMap<QString,QToolButton*>::iterator it = m_mapBtn.begin();

while(it != m_mapBtn.end())

{

ui->gridLayout->addWidget(it.value(),row,col++);

if(col%4 == 0)//每行四列按钮

{

row++;

col = 0;

}

it++;

}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP