解决方法:
clear()之后随即调用setRowCount(0)
另一种办法好像不管用:
//tableFileList1->clearSpans();
tableFileList1->clear();
代码如下:
void WidgetFileList::refreshTable()
{
//tableFileList1->clearSpans(); //好像不管用
tableFileList1->clear();
tableFileList1 ->setRowCount(0); **//务必加setRowCount(0),否则再次调用refreshTable()时会程序崩溃**
myLogger->sendDebugInfor(DebugErro,QString("刷新前表格行数为%1").arg(tableFileList1->rowCount()));
FileListWrapper.clear();
for(auto i : TotalFileList)
FileListWrapper.append(new DataInfor(NULL,i));
for(auto i : FileListWrapper)
{
currentRow=tableFileList1->rowCount();
tableFileList1->insertRow(currentRow);
//tableFileList1->setItem(currentRow,0,new QTableWidgetItem(i->getStringTaskID()));
tableFileList1->setCellWidget(currentRow,0,i->getCheckBox());
tableFileList1->setItem(currentRow,1,new QTableWidgetItem(i->getStringTaskID()));
tableFileList1->setItem(currentRow,2,new QTableWidgetItem(config::mapIntToQString(i->getdataType())));
tableFileList1->setItem(currentRow,3,new QTableWidgetItem(i->getStringStartTime()));
tableFileList1->setItem(currentRow,4,new QTableWidgetItem(QString(i->getStringEndTime())));
tableFileList1->setItem(currentRow,5,new QTableWidgetItem(i->getStringFileSize()));
}
config::setupRightAlignment(tableFileList1,1,6);
emit refreshAreaOneSpaceUsed();
myLogger->sendDebugInfor(DebugErro,QString("刷新后表格行数为%1").arg(tableFileList1->rowCount()));
}
效果: