我必须通过串口发送文件,所以我使用一个名为 serialWorker 的独立线程。
在主线程中我有这个:
ui->progressBar->setMaximum(file.size());
QTextStream in(&file);
while(!in.atEnd()){
serialWorker.send(line);
ui->progressBar->setValue(in.pos());
}
问题是进度条实时不是",即,由于serialWorker没有阻止主线程,循环运行而不等待。我该如何更好地接近这个?
答案 0 :(得分:2)
您正在循环中更新进度条,阻止主GUI线程,因此您的进度条不会更新。
您应该使用serialWorker中的信号通知用户界面中的进度条,以获取进度值。在发送功能中,您应该发出具有适当值的信号。信号如下:
void progressChanged(int val);
您还应该将progressChanged(int)信号连接到QProgressBar的setValue(int value)插槽。
最后一点是,当它在另一个线程中时,你不应该直接调用send。正确的方法是将发送定义为插槽并将信号连接到该插槽,并在您要呼叫发送时发出信号。