Qt 文本浏览器不实时显示

Posted

技术标签:

【中文标题】Qt 文本浏览器不实时显示【英文标题】:Qt text browser not displays in real time 【发布时间】:2014-08-09 08:52:20 【问题描述】:

我写了一个函数来计算一些值,并使用append在每次计算值时将它们写入textBrowser

我想要的是每次append执行时,数据同时显示在textBrowser中。

但是,当函数结束时,所有数据都会立即显示。不是一一的。

另外,我有一个按钮。我希望它在推送时更改其文本,并在其功能完成时再次更改。于是我写了:

void MainWindow::on_btn_clicked()
    ui->btn->setText("Running...");
    //some codes
    ui->btn->setText("Reset");

但它只会在 clicked 函数结束时将按钮的文本更改为“重置”。

我认为这两个问题可能是相关的,但我找不到解决方案。

【问题讨论】:

【参考方案1】:

在控件返回事件循环之前,GUI 不会更新。因此,当附加到文本浏览器时,一旦执行主事件循环,它们就会全部更新。这也适用于设置按钮的文本。当调用on_btn_clicked() 时,按钮的文本直到函数完成才会更新。

如果你有一些需要长时间处理的代码,那么你不应该把它放在主线程中。它应该在另一个线程中完成,该线程通过信号和槽与主线程交互,以便报告一些进度或更新 GUI 元素。

【讨论】:

【参考方案2】:

您需要了解程序中发生了什么。

首先,看看Threading Basics。之后,您可以从Multithreading Technologies in Qt 中选择您想要的方法。

简而言之,您的问题是您在主线程中进行了一些阻塞的长期计算。为避免这种情况,您必须在单独的线程中提供所有计算。以下是您问题的充分答案:https://***.com/a/1386160/867349。

最简单但不好的方法是将QCoreApplication::processEvents() 例如放在//some codes 的循环中。希望您能找到更好的方法,例如 QtCuncurrentRun 或在上面的链接中准备工作线程

【讨论】:

以上是关于Qt 文本浏览器不实时显示的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从 QT GUI 的文本浏览器读取数据

二Qt定时器与文本编辑器制作《QT 入门到实战》

二Qt定时器与文本编辑器制作《QT 入门到实战》

二Qt定时器与文本编辑器制作《QT 入门到实战》

使用py 和flask 实现的日志文件实时显示到网页的功能 + 系统文件夹浏览下载功能。

Qt:如何编写 Windows 桌面实用程序?