空scrollArea QT C ++

时间:2012-10-30 22:28:12

标签: c++ qt

我正在从计时器执行的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);
}

2 个答案:

答案 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";
}