QT cpp延迟for循环

时间:2015-05-19 16:13:08

标签: c++ qt qthread

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

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

我的代码看起来像这样:

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

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

我如何延迟循环?

1 个答案:

答案 0 :(得分: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将得到更新。但这有点像黑客。

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