C++ Qt中进度条的正确使用?
我必须通过串行端口发送文件,因此我使用一个单独的线程,名为serialWorker 在主线程中,我有以下内容:C++ Qt中进度条的正确使用?,c++,multithreading,qt,progress-bar,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()); } 问题
ui->progressBar->setMaximum(file.size());
QTextStream in(&file);
while(!in.atEnd()){
serialWorker.send(line);
ui->progressBar->setValue(in.pos());
}
问题是进度条不是“实时”的,也就是说,由于serialWorker不阻塞主线程,因此循环运行时不会等待。我应该如何更好地处理这个问题?您正在更新循环中的进度条,该循环会阻止GUI主线程,因此您的进度条不会得到更新 您应该使用serialWorker中的信号通知用户界面中的进度条进度值。在发送函数中,您应该发出具有适当值的信号。信号如下:
void progressChanged(int val);
还应将progressChanged(int)信号连接到QProgressBar的setValue(int-value)插槽
最后一点是,当send在另一个线程中时,不应该直接调用它。正确的方法是将send定义为一个插槽,并将一个信号连接到该插槽,并在您想要调用send时发出信号。什么是serialWorker?管理连接的线程。您不能检测到,这个线程何时完成,您的线路何时被处理?它是发出信号还是退出?如果是,那么当线程或行处理完成时,可以增加进度条。好的,我想我可以在完成发送行时发出一个信号。