我需要在不同的线程中运行计算密集型函数,以便 GUI 在运行时不会卡住或变灰。
我按照这个例子:https://stackoverflow.com/a/16501374/2904614
但 GUI 仍然卡住并变灰。
主窗口.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->textBrowser->setFont(QFont("Monospace",11));
ui->textBrowser->setLineWrapMode(QTextEdit::NoWrap);
updater->moveToThread(thread);
connect(updater,SIGNAL(req()), this, SLOT(getCheckSum()));
connect(thread, SIGNAL(destroyed()), updater, SLOT(deleteLater()));
thread->start();
}
当用户点击指定按钮时。由于一个目录中可能有很多文件,当 QDirIterator 遍历所有文件时,GUI 将卡住。我希望添加一个进度条,向用户显示程序仍在运行。
void MainWindow::on_pushButton_clicked()
{
updater->getHash();
//getCheckSum();
}
编辑
我想让函数 MainWindow::getCheckSum()
在与 GUI 不同的线程中运行。我将如何实现?
最佳答案
如果您只需要运行一个函数,我会推荐 QtConcurrent。从文档中提取:
在单独的线程中运行函数
要在另一个线程中运行函数,请使用 QtConcurrent::run():
extern void aFunction();
QFuture<void> future = QtConcurrent::run(aFunction);
这将在从默认 QThreadPool 获得的单独线程中运行 aFunction。您可以使用 QFuture 和 QFutureWatcher 类来监视函数的状态。
关于c++ - 从不同线程更新 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23857713/