Supposons que le listage (non récursif) d'un seul dossier soit suffisamment court pour ne pas figer l'interface.
On pourrait utiliser une queue de dossiers, et une de fichiers à traiter, et découper le "parcourir une partition à la recherche de .ogg" en opérations. Une opération consisterait à lister le prochain dossier de la queue, ajouter les sous-dossiers à la queue, et ajouter les "*.ogg" dans la seconde queue, et c'est tout. Si des évènements de l'interface se produisent (même un simple réaffichage), ils seront traités à la fin d'une opération (somme toute peu longue), et s'il n'y a aucun évènement à traiter, on peut directement passer à la prochaine opération du parcours.
Qt propose même une fonction pour traiter les évènements que l'on peut appeler soi même de temps en temps : http://doc.trolltech.com/4.6/qcoreapplication.html#processEvents
Il reste possible de ne même pas faire une grosse fonction qui fait tout, en quittant le callback après avoir traité une seule opération, et laisser Qt rappeler le callback quand ça sera possible, pour traiter la prochaine opération.
Si même le listage d'un dossier est trop long, alors effectivement Qt ne propose pas de fonctions pour cela. Il faudra utiliser les API bas niveau de listage de dossier, qui ne remplissent pas une liste mais itèrent sur son contenu.
[^] # Re: Correction
Posté par BFG . En réponse au journal Les bitcoins n'intéressent pas que les geeks. Évalué à 1.
Supposons que le listage (non récursif) d'un seul dossier soit suffisamment court pour ne pas figer l'interface.
On pourrait utiliser une queue de dossiers, et une de fichiers à traiter, et découper le "parcourir une partition à la recherche de .ogg" en opérations. Une opération consisterait à lister le prochain dossier de la queue, ajouter les sous-dossiers à la queue, et ajouter les "*.ogg" dans la seconde queue, et c'est tout. Si des évènements de l'interface se produisent (même un simple réaffichage), ils seront traités à la fin d'une opération (somme toute peu longue), et s'il n'y a aucun évènement à traiter, on peut directement passer à la prochaine opération du parcours.
Qt propose même une fonction pour traiter les évènements que l'on peut appeler soi même de temps en temps : http://doc.trolltech.com/4.6/qcoreapplication.html#processEvents
Il reste possible de ne même pas faire une grosse fonction qui fait tout, en quittant le callback après avoir traité une seule opération, et laisser Qt rappeler le callback quand ça sera possible, pour traiter la prochaine opération.
Si même le listage d'un dossier est trop long, alors effectivement Qt ne propose pas de fonctions pour cela. Il faudra utiliser les API bas niveau de listage de dossier, qui ne remplissent pas une liste mais itèrent sur son contenu.