#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); MainWindow::executeTest(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::executeTest() { QStandardItemModel *myModel = NULL; QListcolumnItem; QList>QStandardItemList; QString item = NULL; QVariant qvData; int masterRowNumber = 0; int numberOfRows = 50000; int removeRows = 40000; int numCol = 15; int row = 0; int col = 0; myModel = new QStandardItemModel; //Get some data 50000 rows; each row has 15 columns of dummy data for(row = 0; row < numberOfRows; row++) { columnItem.clear(); for(col = 0; col < numCol; col++) { columnItem.append(new QStandardItem); //add columns to each row item = QString::number(row); columnItem[col]->setData(item, 0); } QStandardItemList.append(columnItem); } qDebug() << "creating first set of data"; //Now that we have our data lets put into the model ui->treeView->setModel(myModel); ui->treeView->setUniformRowHeights(true); //Speeds up scrolling ui->treeView->setSortingEnabled(true); //enable sorting for(row = 0; row < QStandardItemList.size(); row++) { //Inserting data into the model for (col = 0; col < QStandardItemList[row].size(); col++) myModel->setItem(row, col, QStandardItemList[row][col]); masterRowNumber++; } qDebug() << "After first Insert into model"; //sort the data - in the treeView ui->treeView->sortByColumn(2, Qt::AscendingOrder); //Now that our model is populated and shown in the treeView - lets delete rows // **** It takes forever to delete the first set of row after the sort. If I use a QSortProxyModel it will delete the first set but then afterwards the long lag // comes back! //In 5.12 This is very SLOW!!! but fast in 5.11 ui->treeView->setSortingEnabled(false); myModel->removeRows(0, removeRows, QModelIndex()); //remove 40000 rows ui->treeView->setSortingEnabled(true); masterRowNumber -= removeRows; qDebug() << "After first delete of rows now creating new set of data"; QStandardItemList.clear(); //Get some data 50000 rows; each row has 15 columns of dummy data for(row = 0; row < numberOfRows; row++) { columnItem.clear(); for(col = 0; col < 1; col++) { columnItem.append(new QStandardItem); //add columns to each row item = QString::number(row + col); //any dummy data columnItem[col]->setData(item, 0); } QStandardItemList.append(columnItem); } qDebug() << "created second data completed"; //now lets add more rows again for(row = 0; row < QStandardItemList.size(); row++) { //Inserting data into the model for (col = 0; col < QStandardItemList[row].size(); col++) myModel->setItem(masterRowNumber, col, QStandardItemList[row][col]); masterRowNumber++; } qDebug() << "After second insert into model"; ui->treeView->setSortingEnabled(false); myModel->removeRows(0, removeRows, QModelIndex()); //remove 40000 rows ui->treeView->setSortingEnabled(true); masterRowNumber -= removeRows; qDebug() << "After second delete"; qDebug() << "finished"; }