问题:没有QProgressBar动画,最小和最大步数设置为0

Bea*_*ead 3 c++ qt

我的QProgressBar有问题,我希望有人有个主意......

我自己创建了一个带有QProgressBar的进度对话框.我将最小和最大步数设置为0,以便进度表明我的程序正忙(动画事物......).

我显示()此进度对话框并激活此对话框的Qt :: WindowModal.

问题:我在复制文件时使用此对话框,但进度条停止,没有动画表示我的程序仍然处于忙碌状态.我使用windows函数'SHFileOperation'将一个包含大量文件的目录复制到目标.当然,这会给系统带来很大的负担,但至少应该继续前进.

任何帮助表示赞赏!

先谢谢,BearHead

Ton*_*vel 7

问题是该SHFileOperation调用将阻止主事件循环.因此,不会处理任何事件以防止QProgressBar更新.

要解决此问题,您可以在单独的线程中执行复制操作.最简单的方法是使用Qt Concurrent,例如如下:

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

假设dialog是指向进度对话框的指针.

顺便说一句,你为什么要使用SHFileOperation的,而不是由提供的操作QDirQFile