Conseils de barre de progression de codage

Dans mon application, je suis en train d’parsingr un fichier XML et de valider le contenu avec le schéma xsd. Lorsque le fichier XML grossit, l’parsing du fichier et la validation du contenu prend un certain temps. Dans ce cas, je veux visualiser les phases d’parsing et de validation avec la barre de progression. Comment faire ça?

Note: J’utilise Qt avec C ++

    En gros, vous créez simplement une instance de QProgressDialog :

     QProgressDialog progress("Parsing...", "Abort", 0, numOperations, this); progress.setWindowModality(Qt::WindowModal); 

    numOperations correspond au nombre total de numOperations à effectuer avant l’parsing. Pour cela, vous devez probablement effectuer une première passe rapide dans les données où vous comptez simplement le nombre total d’éléments à parsingr ou quelque chose de similaire, et définissez cette valeur comme valeur maximale numOperations dans l’exemple de code précédent. Ensuite, vous effectuez le traitement actuel et appelez setValue périodiquement:

     progress.setValue(finishedOperations); 

    où finishOperations correspond au nombre d’éléments analysés jusqu’à présent.

    En supposant que vous souhaitiez la solution la plus simple, la barre de progression apparaît sous la forme d’une boîte de dialog modale distincte. Si vous voulez donner à l’utilisateur la possibilité d’abandonner le processus, vous devez implémenter un emplacement que vous connectez au signal canceled() .

    Si vous ne voulez pas que la barre de progression soit dans une boîte de dialog modale, vous affichez simplement un QProgressBar quelque part. Cela fonctionne de la même manière en appelant régulièrement setValue ().

    En supposant que l’implémentation d’parsing xml extrait ses données d’une sorte de stream mis en mémoire tampon attaché à un lecteur de fichier – lisez la taille du fichier, puis mettez à jour l’indicateur de progression chaque fois que le tampon d’entrée saisit un autre bloc du lecteur de fichier. Cela peut probablement être fait plus facilement en dérivant une nouvelle classe à partir de la classe de lecteur de fichiers et en remplaçant la fonction de bloc de lecture pour signaler la progression.

    L’avantage de cette approche est qu’elle ne nécessite pas de travail supplémentaire pour une parsing préalable afin d’estimer le nombre d’opérations et peut être utilisée avec tout type de système de traitement de fichier en continu, qu’il soit xml ou tout autre format.

    Quelle est la structure de boucle principale de votre algorithme?

    Si vous faites un seul passage dans le document, vous pouvez ne pas savoir quand vous êtes sur le point d’atteindre la fin. Pour obtenir un bon indicateur de progression, vous devrez peut-être passer à une implémentation en deux passes – ce qui peut être plus lent, mais donne l’avantage de la rétroaction.