在Qt中正确使用进度条?

时间:2014-05-07 07:20:06

标签: c++ multithreading qt progress-bar

我必须通过串口发送文件,所以我使用一个名为 serialWorker 的独立线程。

在主线程中我有这个:

ui->progressBar->setMaximum(file.size());    

QTextStream in(&file);
while(!in.atEnd()){

    serialWorker.send(line);  

    ui->progressBar->setValue(in.pos());        

}

问题是进度条实时不是",即,由于serialWorker没有阻止主线程,循环运行而不等待。我该如何更好地接近这个?

1 个答案:

答案 0 :(得分:2)

您正在循环中更新进度条,阻止主GUI线程,因此您的进度条不会更新。

您应该使用serialWorker中的信号通知用户界面中的进度条,以获取进度值。在发送功能中,您应该发出具有适当值的信号。信号如下:

void progressChanged(int val);

您还应该将progressChanged(int)信号连接到QProgressBar的setValue(int value)插槽。

最后一点是,当它在另一个线程中时,你不应该直接调用send。正确的方法是将发送定义为插槽并将信号连接到该插槽,并在您要呼叫发送时发出信号。