Bonjour à tous,
Quelle serait selon vous la meilleur approche pour charger une grosse quantité de texte (de 100 000 à 1 000 000 lignes) dans un QTextEdit (ou un autre composant, si il en existe un de plus adapté).
Après quelques recherches sur le net, j'ai constaté que cette question revient assez souvent, mais je n'ai pas encore trouvé de réponse satisfaisante (dans la doc QT non plus d'ailleurs).
Si vous vous demandez l'utilité de la démarche, le but est de pouvoir naviguer dans le contenu d'un "gros" log, comme on le ferait via un simple éditeur de texte. L'intérêt du projet réside dans la possibilité d'appliquer des filtres ou des couleurs en fonction du niveau de trace (propre à une ligne), ce que ne permet pas un éditeur de texte lambda.
Actuellement j'utilise notepad++ pour visualiser ces logs, qu'il arrive à charger dans un temps très correct. Il semblerait qu'il charge tout le contenu dans la zone de texte, ma première approche a donc été de charger tout le contenu (via un setText) du log dans le QTextEdit. Cependant, avec un contenu de plus de 10 000 lignes, le temps de chargement commence déjà à être fastidieux sur une bonne machine et je ne parle même pas du cas de 100 000 (10 Mo) voir 1 000 000 de lignes.
Ma seconde approche, consiste à utiliser un système de fenêtrage. Autrement dit, je me contente de charger une centaine de ligne du contenu total dans le QTextEdit et je mets ce contenu à jour dynamiquement en fonction du scroll, le contenu total étant uniquement stocké en mémoire.
Le problème réside dans la gestion de la scrollbar, qui ne refléte pas la taille complète du document, car elle s'adapte au contenu "réel" du QTextEdit, c'est à dire la centaine de lignes contenues dans le QTextEdit et non les 100 000 ou plus. J'ai beau modifier le range de la scrollbar, visuellement, elle s'adapte toujours au contenu effectif.
Voilà pour mes approches personnelles, si quelqu'un a une idée qui pourrait me mettre sur la piste, je suis preneur. D'avance merci.
Partager