for循环中的QT cpp延迟
QT cpp delay in for loop
我有一个循环来填充我的 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 而不是使用循环。例如,您可以使用如下所示的插槽。
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
作为 class 变量。
但是如果您只是想以某种方式完成此操作,则可以在循环中使用以下代码而不是 sleep
。这将阻止 for
循环但继续处理事件,因此 UI 将在迭代时得到更新。但这有点骇人听闻。
QEventLoop loop;
QTimer::singleShot(1000, &loop, SLOT(quit()));
loop.exec();
我有一个循环来填充我的 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 而不是使用循环。例如,您可以使用如下所示的插槽。
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
作为 class 变量。
但是如果您只是想以某种方式完成此操作,则可以在循环中使用以下代码而不是 sleep
。这将阻止 for
循环但继续处理事件,因此 UI 将在迭代时得到更新。但这有点骇人听闻。
QEventLoop loop;
QTimer::singleShot(1000, &loop, SLOT(quit()));
loop.exec();