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()));
您必须将array
和i
保留为类变量。
但是,如果您只是想以某种方式完成此操作,则可以在循环中使用以下代码而不是 sleep
。这将阻止for
循环,但会继续处理事件,以便在迭代时更新 UI。但这有点像 hack。
QEventLoop loop;
QTimer::singleShot(1000, &loop, SLOT(quit()));
loop.exec();
【讨论】:
有没有可能他不会覆盖我的 textbrowser 行?我希望他在每个循环中创建一行。以上是关于for循环中的QT cpp延迟的主要内容,如果未能解决你的问题,请参考以下文章