这就是我所拥有的:
void MyThread::run() {
int progress = 0;
while (1) {
// do something
progres++;
emit(progressChanged(progress));
}
}
// mainwindow
auto t = new MyTread();
connect(t, SIGNAL(progressChanged(int)), this, SLOT(onProgressChanged(int)));
t->start();
void MaiWindow::onProgressChanged(int) {
this->progressBar->setValue(progressBar->value() + 1);
}
它起作用了,线程中的工作完成了,进度条一直上升到 100%。
但是用户界面完全冻结/滞后。拖动带有进度条的窗口会导致 5 秒延迟。我尝试使用较低的线程优先级 - 没有结果。
也许我在这里需要一个互斥锁?