2015-05-19 3 views
-1

У меня есть цикл, который заполняет мой виджет textBrowser. Теперь я хочу иметь 1сек задержки в моем цикле. Я хочу, чтобы он добавил одну строку и подождал 1 секунду, прежде чем заполнить еще одну строку. Я пробовал его спящим в моей петле, но он не работает. Он незаметно заполняет мой текстовый редактор.QT cpp задержка для цикла

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

мой код выглядит следующим образом:

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

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

Как я могу задержать мой цикл?

+0

Просьба уточнить, что «не работает», * как * это не работает? Что происходит при создании или запуске приложения? –

+0

* отредактировал (он заполнил мой текстовый редактор без каких-либо задержек) – user3676560

+1

Вы пытались использовать QTimer? –

ответ

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, но продолжит обработку событий, поэтому пользовательский интерфейс будет обновляться во время итерации. Но это своего рода хак.

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

Возможно ли, что он не перезапишет мою строку textbrowser? Я хочу, чтобы он создавал строку в каждом цикле. – user3676560

Смежные вопросы