Empty scrollArea QT C++

Empty scrollArea QT C++

本文关键字:C++ QT scrollArea Empty      更新时间:2023-10-16

我正在加载来自Timer执行的XML数据。XML在实体对象中解析并填充。在一个循环中,请从实体对象中获取数据并填充QCommandLinkbutton的数据。最后,将一批按钮设置在verticallayout,然后在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);
}

您可以使用 setWidget 替换 setLayout 。删除旧数据。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);

}

我在互联网深处找到了答案。

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