我正在从计时器执行的xml加载数据。在实体对象中解析并填充xml。 在一个循环中,我从实体对象中获取数据并填充QCommandLinkButton。最后,一批按钮设置在verticalLayout中,然后设置在scrollArea中。
但每次加载数据时,它都附加到旧数据。如何在重新填充scrollArea之前清空srollArea的内容。
MainWindow::methodExecudedByTimer(){
foreach(int i, map.keys()){
QCommandLinkButton* buttonEmail = new QCommandLinkButton(this);
Email em = map[i];
buttonEmail->setText(em.__toString());
ui->verticalLayout->addWidget(buttonEmail);
}
ui->scrollArea->setLayout(ui->verticalLayout);
}
答案 0 :(得分:1)
您可以使用 setWidget 替换 setLayout 。然后新数据即将发布,您可以调用 takeWidget 删除旧数据。 主窗口:: methodExecudedByTimer(){
foreach(int i, map.keys()){
QCommandLinkButton* buttonEmail = new QCommandLinkButton(this);
Email em = map[i];
buttonEmail->setText(em.__toString());
ui->verticalLayout->addWidget(buttonEmail);
}
ui->scrollArea->takeWidget();
QWidget *widget = new QWidget();
QSize size = ui->scrollArea->size();
widget->setMinimumSize(size.width(),size.height());
widget->setLayout(ui->verticalLayout);
ui->scrollArea->setWidget(widget);
}
答案 1 :(得分:0)
我在互联网的深处找到了答案。
在foreach
之前我添加了这个:
qDebug() << "check if layout filled";
if(ui->verticalLayout->count() > 0){
qDebug() << "empty layout";
QLayoutItem *item = NULL;
while ((item = ui->verticalLayout->takeAt(0)) != 0) {
delete item->widget();
}
}else{
// on app first run
qDebug() << "layout empty";
}