Hi all,

I need to populate the standardItemModel for my treeView, with possibly upto 300,000 rows.

My treeView acts like a TableView, I guess I could use TableView if its quicker, as there is a flat hierarchy of items.

At the moment 30,000 rows can take 5-6 seconds, which is unacceptable.
I'm pretty sure I'm doing something sub-optimal.
Thus why the need for a progress bar.

Any suggestions please.

Qt Code:
  1. treeView = new QTreeView;
  2. model = new QStandardItemModel(0,13);
  3. treeView->setModel(model);
  4.  
  5. void GamesTab::showMatches()
  6. {
  7. treeView->setUpdatesEnabled (false);
  8.  
  9. modelindex = model->index(0, 0, modelindex);
  10. model->insertRows(0, mainBoard->filteredResults.size(), modelindex);
  11. QVariant data;
  12.  
  13. QString number =
  14. for (unsigned int i = 0; i < mainBoard->filteredResults.size(); i++) {
  15. int db = mainBoard->filteredResults[i]->dbIndex;
  16. int game = mainBoard->filteredResults[i]->gameIndex;
  17. gamePtr = dbManager_->databases[db]->database->Games[game];
  18.  
  19. data = (dbManager_->databases[db]->name).c_str();
  20. model->setData(model->index(i, headerPosDatabase_, modelindex), data);
  21. data = (gamePtr->getPlayerW()).c_str();
  22. model->setData(model->index(i, headerPosPlayerWhite_, modelindex), data);
  23. data = (gamePtr->getPlayerB()).c_str();
  24. model->setData(model->index(i, headerPosPlayerBlack_, modelindex), data);
  25. data = (gamePtr->getRankW()).c_str();
  26. model->setData(model->index(i, headerPosRankWhite_, modelindex), data);
  27. data = (gamePtr->getRankB()).c_str();
  28. model->setData(model->index(i, headerPosRankBlack_, modelindex), data);
  29. data = (gamePtr->getResultStr()).c_str();
  30. model->setData(model->index(i, headerPosResult_, modelindex), data);
  31. data = (gamePtr->getKomi()).c_str();
  32. model->setData(model->index(i, headerPosKomi_, modelindex), data);
  33. data = (gamePtr->getDate()).c_str();
  34. model->setData(model->index(i, headerPosDate_, modelindex), data);
  35. data = gamePtr->getMoveCount();
  36. model->setData(model->index(i, headerPosMoveCount_, modelindex), data);
  37. data = (gamePtr->getHandicap()).c_str();
  38. model->setData(model->index(i, headerPosHandicap_, modelindex), data);
  39. data = (gamePtr->getPlace()).c_str();
  40. model->setData(model->index(i, headerPosPlace_, modelindex), data);
  41. data = (gamePtr->getEvent()).c_str();
  42. model->setData(model->index(i, headerPosEvent_, modelindex), data);
  43.  
  44. progressBar_->setValue(i + 1);
  45. }
  46.  
  47. treeView->setUpdatesEnabled (true);
To copy to clipboard, switch view to plain text mode