for循环中的QT cpp延迟

Posted

技术标签:

【中文标题】for循环中的QT cpp延迟【英文标题】:QT cpp delay in for loop 【发布时间】:2015-05-19 16:13:08 【问题描述】:

我有一个循环来填充我的 textBrowser 小部件。现在我想在我的循环中有 1 秒的延迟。我希望他追加一行并等待 1 秒,然后再填充另一行。 我在我的循环中尝试了睡眠,但它不起作用。他毫不拖延地填满了我的文本浏览器。

*#include <QThread>*
..
sleep(1);

我的代码是这样的:

 for(int i = 0; i < array.count(); i++)

        
     QString br = "ID-->"+array[i];
     ui->textBrowser->append(br);
   

我怎样才能延迟我的循环?

【问题讨论】:

请详细说明“不起作用”,如何不起作用?当您构建或运行应用程序时会发生什么? *已编辑(他毫不拖延地填满了我的文本浏览器) 你试过使用QTimer吗? 可能是 1 毫秒吗? 【参考方案1】:

最好使用 QTimer 中的事件而不是使用循环。例如,您可以使用如下所示的插槽。

int i = 0;

void MainWindow::OnTimer()

    QString br = "ID-->" + array[i++];
    ui->textBrowser->append(br);
    if (i < array.count())
    
        QTimer::singleShot(1000, this, SLOT(OnTimer()));
    

您必须将arrayi 保留为类变量。

但是,如果您只是想以某种方式完成此操作,则可以在循环中使用以下代码而不是 sleep。这将阻止for 循环,但会继续处理事件,以便在迭代时更新 UI。但这有点像 hack。

QEventLoop loop;
QTimer::singleShot(1000, &loop, SLOT(quit()));
loop.exec();

【讨论】:

有没有可能他不会覆盖我的 textbrowser 行?我希望他在每个循环中创建一行。

以上是关于for循环中的QT cpp延迟的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX延迟for循环中的颜色变化

如何延迟 For 循环直到声音在 Swift 中播放完毕

cpp-for循环

修改 for 循环以不在批处理脚本中使用延迟扩展

在“for”循环迭代之间添加延迟

qt 空循环一秒怎么写