0

我正在从计时器执行的 xml 加载数据。xml 被解析并填充到实体对象中。在一个循环中,我从实体对象中获取数据并填充 QCommandLinkBut​​ton。最后将一批按钮设置为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);
}
4

2 回答 2

1

您可以使用setWidget替换setLayout 。然后新数据来了,您可以调用takeWidget来删除旧数据。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->takeWidget();
QWidget *widget = new QWidget();
QSize size = ui->scrollArea->size();
widget->setMinimumSize(size.width(),size.height());
widget->setLayout(ui->verticalLayout);
ui->scrollArea->setWidget(widget);

}

于 2012-10-31T01:52:55.213 回答
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";
}
于 2012-10-31T21:35:21.307 回答