Qt文本浏览器无法实时显示

时间:2014-08-09 08:52:21

标签: c++ qt updating qtextbrowser

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

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

但是,当功能结束时,所有数据都会立即显示。不是一个接一个。

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

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

但是当clicked功能结束时,它只会将按钮的文本更改为“重置”。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

您需要了解程序中的内容。

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

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

最简单但不好的方法是将QCoreApplication::processEvents()置于//some codes的周期内。希望您能找到更好的方式QtCuncurrentRun或在上面的链接中准备工作线程