QT CPP延迟for循环

问题描述:

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

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

我的代码看起来像这样:

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

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

我怎么能耽误我的循环?

+0

请详细说明“不起作用”,* how *不起作用吗?当您构建或运行应用程序时会发生什么? –

+0

*编辑(他毫不拖延地填写我的文本浏览器) – user3676560

+1

您是否尝试过使用QTimer? –

最好使用形成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将得到更新。但它是一种黑客。

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

是否有可能他不覆盖我的textbrowser行?我希望他每循环创建一行。 – user3676560