我有一个填充textBrowser小部件的循环。现在我希望循环中有1秒的延迟。我希望他追加一行并等待1秒再填充另一行。 我在循环中尝试了睡眠,但它不起作用。他毫不拖延地填写我的文本浏览器。
*#include <QThread>*
..
sleep(1);
我的代码看起来像这样:
for(int i = 0; i < array.count(); i++)
{
QString br = "ID-->"+array[i];
ui->textBrowser->append(br);
}
我如何延迟循环?
答案 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()));
}
}
您必须将array
和i
保留为类变量。
但是,如果您只想以某种方式完成此操作,则可以在循环中使用以下代码而不是sleep
。这将阻止for
循环但继续处理事件,以便在迭代时UI将得到更新。但这有点像黑客。
QEventLoop loop;
QTimer::singleShot(1000, &loop, SLOT(quit()));
loop.exec();