J'ai un QTableWidget contenant plus de 200 000 lignes et 8 colonnes. Les colonnes ont une taille fixe. Les rangées ont une taille variable. Ajouter les éléments à la table est rapide (quelques secondes). P>
Ensuite, l'appel de Resizerowstocontents () prend presque 60/120 secondes! Je vois que cet appel est un seul fil! (Un seul travail de base). Puis-je forcer la multithreading? Comment puis-je accélérer la ligne de résolution de la ligne? P>
merci, Salvo p>
3 Réponses :
Redimensionnement doit recalculer, chaque rangée hard et ajuster. Je ne recommanderais pas d'avoir ces nombreuses lignes dans un seul QTableWidget. J'irais pour une technique de pagination ou une fonctionnalité de chargement dynamique pour cette longue liste. P>
Une chose que vous pourriez essayer est de mettre à jour le Premièrement, profitez du fait qu'un attendra efficacement jusqu'à ce que la file d'attente d'événement soit vide, puis invoquer Ecrivez maintenant la fonction ... P> qtablaphget code> rangée à ligne en utilisant
QTableWidget :: restifizerowtocontents code>
(Remarque: ligne code> plutôt que
lignes code>) avec les mises à jour étant entrelacées avec d'autres événements dans la file d'attente. Globalement, le processus prendrait toujours le même temps, mais votre interface graphique resterait réactif pendant le processus.
Qticer code>
avec un délai d'attente zéro émitera son signal de délai d'attente chaque fois que la file d'attente de l'événement devient vide. Donc, tel que ... p> my_callback code>. Si
my_callback code> appelle la même ligne de code, vous disposez d'une fonction qui vous invoque automatiquement au cours de la prochaine période d'inactivité. P>
QTimer::singleShot(0, [table_widget, row = 0](){ resize_row(table_widget, row, 10); });
Si vous voulez plus de vitesse, utilisez QabstractTableModel au lieu de QTableWidget et remplacez les fonctions requises. C'est un exemple simple et bon: https://doc.qt.io/qt-5/modelview.htmlled/a > p>