2010-10-08 3 views
3

J'ai eu un problème avec mon QProgressBar et j'espère que quelqu'un a une idée ...problème Qt: Aucune animation QProgressBar avec des étapes minimum et maximum fixé à 0

J'ai créé un dialogue de progression avec un QProgressBar sur mon posséder. J'ai mis les étapes minimum et maximum à 0 pour que la progression indique que mon programme est occupé (la chose de l'animation ...).

Je montre() cette boîte de dialogue de progression et active le Qt :: WindowModal pour ce dialogue. Le problème: J'utilise cette boîte de dialogue lors de la copie de fichiers mais la barre de progression s'arrête et plus d'animation pour indiquer que mon programme est toujours occupé. J'utilise la fonction windows 'SHFileOperation' pour copier un répertoire avec beaucoup de fichier vers une destination. Ceci, bien sûr, produit beaucoup de charge sur le système mais au moins les progrès devraient continuer à bouger.

Toute aide est appréciée!

Merci à l'avance, Bearhead

Répondre

7

Le problème est que l'appel SHFileOperation bloque la boucle d'événement principal. Par conséquent, aucun événement ne sera traité pour empêcher la mise à jour du QProgressBar.

Pour résoudre ce problème, vous pouvez effectuer l'action de copie dans un fil distinct. La meilleure façon d'aller à ce sujet utilise Qt Concurrent, par exemple comme suit:

QFuture<void> future = QtConcurrent::run(SHFileOperation, ...); 
QFutureWatcher<void> watcher; 
connect(&watcher, SIGNAL(finished()), dialog, SLOT(close())); 

En supposant dialog est un pointeur vers votre boîte de dialogue de progression. Pourquoi utiliser SHFileOperation au lieu des opérations fournies par QDir et QFile?

Questions connexes