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);
}
我怎么能耽误我的循环?
答
最好使用形成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()));
}
}
你将不得不继续array
和i
为一类变量。
但是,如果您只是想以某种方式完成此操作,则可以在循环中使用以下代码,而不是sleep
。这会阻止for
循环,但会继续处理事件,以便迭代时UI将得到更新。但它是一种黑客。
QEventLoop loop;
QTimer::singleShot(1000, &loop, SLOT(quit()));
loop.exec();
+0
是否有可能他不覆盖我的textbrowser行?我希望他每循环创建一行。 – user3676560
请详细说明“不起作用”,* how *不起作用吗?当您构建或运行应用程序时会发生什么? –
*编辑(他毫不拖延地填写我的文本浏览器) – user3676560
您是否尝试过使用QTimer? –