QTableView ist extrem langsam (auch bei nur 3000 Zeilen)
Ich habe eine Tabelle mit 3000 Zeilen und 8 Spalten. Ich benutze die QTableView.
Elemente einfügen, die ich tun:
QStandardItem* vSItem = new QStandardItem();
vSItem->setText("Blabla");
mModel->setItem(row, column, vSItem);
wo mModel ist QStandardItemModel.
Alles ist in Ordnung, wenn ich nicht zu viele Zeilen, aber wenn ich versuche zu visualisieren groß
Daten (über 3000 Zeilen), dann ist es extrem langsam (20 Sekunden auf Win 7 64-bit (8-core-Rechner mit 8 GB RAM!!!)).
Gibt es irgendetwas, was ich tun kann, um die Leistung zu verbessern?
Vielen Dank im Voraus.
InformationsquelleAutor Tom | 2010-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Guten Ruf auf dem autoresize auf die Inhalte Ihrer Spalten oder Zeilen.
Habe ich eine Funktion Hinzugefügt, die eine Spalte zu der Tabelle jedes mal, wenn ein client mit meinem server-Anwendung. Als die Anzahl der Spalten in der Tabelle habe große, die Einfügung Zeit zu nehmen schien länger und länger.
Habe ich an einem ui->messageLog->resizeRowsToContents(); jeder Zeit. Ich änderte dies, um nur die auto-resize-die Zeile wurde Hinzugefügt-ui->messageLog->resizeRowToContents(0);, und die Langsamkeit ging Weg.
InformationsquelleAutor Eric
Ich habe eine Lösung gefunden: das problem war, dass ich zugewiesen, das Modell in den tableview
bereits im Konstruktor. Jedes mal also, wenn ich das eingefügt Element in das Modell,
tableview informiert wurde und wahrscheinlich aktualisiert. Jetzt habe ich das Modell zuordnen, um die
tableview nur nach füllte ich mein Modell mit Daten.
Dies ist keine elegante Lösung aber es funktioniert. Gibt es vielleicht eine Möglichkeit, vorübergehend
deaktivieren Sie das Modell aus dem tableview oder etwas, das sagt der tableview zu
nicht zu kümmern änderungen im Modell?
Für große Datenmengen würde ich überlegen, zu schreiben, eine "richtige" Modell anstatt QStandardItemModel. Dort können Sie die Daten in größeren Blöcken als einzelne Elemente, die jeweils die Auslösung der Ansicht zu aktualisieren, das sollte mich gewaltig schneller. Edit: ich sehe, ich habe nur wiederholt, was James gesagt...
InformationsquelleAutor Tom
Für diese Menge von Daten, wären Sie besser mit einem benutzerdefinierten Modell - dann hätten Sie die Kontrolle, Wann Sie informieren die anzeigen von updates, zum Beispiel. Die "standard" - Elemente, die Skala um Hunderte, wahrscheinlich Tausende, durch moderne hardware zu schnell, aber Sie sind explizit dokumentiert ist, als nicht bestimmt für die Datensätze dieser Größe.
InformationsquelleAutor James Turner
Haben Sie eine autoresize auf die Inhalte Ihrer Spalten oder Zeilen ? Es kann ein killer sein in der Leistung manchmal !
Einen Blick hier haben :
QHeaderView::ResizeToContents
Hoffe, es hilft !
Was ich habe ist: mUi.mImagesTableView->setAlternatingRowColors(true); mUi.mImagesTableView->setSelectionMode(QAbstractItemView::SingleSelection); mUi.mImagesTableView->setSelectionBehavior(QAbstractItemView::SelectRows); mUi.mImagesTableView->setEditTriggers(QAbstractItemView::NoEditTriggers); mUi.mImagesTableView->setIconSize(QSize(vIconSize, vIconSize)); mUi.mImagesTableView->setColumnWidth(0, vIconPlusBorder); mUi.mImagesTableView->horizontalHeader()->setStretchLastSection(true);
versuchen Sie, und deaktivieren Sie die setStretchLastSection, deaktivieren Sie die auto-resize - (ich weiß nicht, ob es standardmäßig gemacht)... In anderen Worten versuchen, und deaktivieren Sie alles, was damit zusammenhängen könnte, um die Größe von Zeilen und Spalten... In meiner Anwendung, release, habe ich ein treeview (mit Spalten) mit mehr als 10 tausend Stück, und ich kann die Größe ändern, alles ohne problem... Aber wenn ich schalten Sie diese auto-resize-Funktionen, meine perfs unten gehen schlecht !
Hinweis : Auch im debug, sollten Sie haben performance-Probleme mit dieser kleinen Menge an Daten...
Zufällige Idee : Wo erzeugst du die Daten ? In einer Methode, die aufgerufen wird viel Zeit ?
InformationsquelleAutor Andy M
Auch, wenn alle Zeilen die gleiche Höhe haben, die Einstellung http://doc.qt.io/qt-5/qtreeview.html#uniformRowHeights-prop auf true kann die Leistung steigern. In meinem Fall, ein Modell mit über 50.000 Zeilen war fast unbrauchbar, uniformRowHeights auf false gesetzt (Standard). Nach änderung auf true, es funktionierte wie ein Charme.
tun dies fast verdoppelt die Geschwindigkeit !
InformationsquelleAutor bjoern.bauer
versuchen Sie dies :
InformationsquelleAutor Adrian
Ich bin mit 80000 Zeilen und hatte ein ähnliches problem, das hinzufügen von großen Mengen von Elementen in einer Tabelle.
Meine Lösung war, dass es den Speicher in fortgeschrittenen, indem Sie sagen, wie viele Zeilen Sie benötigen.
War ich mit einem Qtableview und Modell, so:
selbst.Modell.setRowCount(80000)
Ich bin sicher, dass Sie das mit Ihrem code
InformationsquelleAutor Worthy7