从其他线程更新GUI

夸克斯顿·黑尔

我需要在另一个线程中运行计算量大的函数,以便GUI在运行时不会冻结或变灰。

我遵循以下示例:https : //stackoverflow.com/a/16501374/2904614

但是GUI仍然冻结并变成灰色。

MainWindow.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的线程中运行。我将如何实施?

GitHub:https : //github.com/Jyang772/PenguSniff

塞巴斯蒂安·兰格(Sebastian Lange)

鉴于您只需要运行一个功能,我建议您使用QtConcurrent。提取文档:

在单独的线程中运行函数

要在另一个线程中运行一个函数,请使用QtConcurrent :: run():

extern void aFunction();
QFuture<void> future = QtConcurrent::run(aFunction);

这将在从默认QThreadPool获得的单独线程中运行aFunction。您可以使用QFuture和QFutureWatcher类来监视函数的状态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android:根据其他线程触发的事件更新 GUI

来自分类Dev

从其他线程更新UI

来自分类Dev

从其他线程更新 AtomicInteger

来自分类Dev

需要更新变量,主线程还是其他线程?

来自分类Dev

读取由其他线程上的Interlocked更新的int

来自分类Dev

如何将图像更新到其他线程?

来自分类Dev

Python Tkinter变量未在其他线程中更新

来自分类Dev

JavaFX-从其他线程更新标签值

来自分类Dev

VB.net 从其他线程更新标签

来自分类Dev

停止其他线程的线程

来自分类Dev

从其他类更新GUI中的列表框

来自分类Dev

BackgroundWorker 未在其他表单上更新 GUI

来自分类Dev

从WPF中的其他线程更新UI控件时,出现“调用线程无法访问该对象,因为其他线程拥有该对象”错误

来自分类Dev

触摸其他线程的视图

来自分类Dev

从服务线程更新JavaFX GUI

来自分类Dev

线程化和更新GUI

来自分类Dev

更新线程的tkinter gui

来自分类Dev

主线程等待其他线程

来自分类Dev

主线程等待其他线程

来自分类Dev

Java:尝试从其他线程更新SWT标签时出现NullPointerException

来自分类Dev

来自其他线程的领域模型更新,但应通知适配器

来自分类Dev

Android-使用其他线程的值更新进度栏

来自分类Dev

WPF更新列表从其他线程和类绑定到DataGrid

来自分类Dev

从其他活动的异步线程更新另一个活动中的recyclerView

来自分类Dev

Regfree COM事件从其他线程失败

来自分类Dev

从其他线程修改Android视图

来自分类Dev

Atexit是否等待其他线程死亡?

来自分类Dev

QMessageBox在其他线程中

来自分类Dev

如何停止其他特定线程?