Qt Задержка после каждой итерации в цикле

306
07 марта 2018, 07:59

Как сделать задержку в цикле после каждой итерации?

void Programma::on_pushButton_clicked()
{
  while (true) {
   //задержка
   // исполняемый код
  }
}
Answer 1

Подобный бесконечный цикл заблокирует главный поток. А это обычно заканчивается установкой костылей. Правильно - использовать QTimer. Вот пример.

Если кратко, вместо кода вида

void Programma::on_pushButton_clicked()
{
  while (true) {
   //задержка
   // исполняемый код
  }
}

пишете где то так

void Programma::on_pushButton_clicked()
{
  // 200 - это задержка
  QTimer::singleShot(200, this, SLOT(ex_code()));
}
void Programma::ex_code()
{
  // исполняемый код
  QTimer::singleShot(200, this, SLOT(ex_code()));
}

200 - это задерка в мс (1000 мс - это одна секунда).

Можно конечно сделать и явно через QTimer, Но мне такой способ показался проще.

Answer 2

Например, вставив (раз у вас C++) инструкцию подождать, скажем, n миллисекунд:

this_thread::sleep_for(chrono::milliseconds(n));

Или соответствующей функцией API операционной системы...

Я правильно понял ваш вопрос? Вы эту задержку имели в виду?

Answer 3

void QThread::sleep(unsigned long secs)

QThread::sleep(1); // seconds

Возможно, стоит рассмотреть интервальные таймеры, чтобы не "замораживать" интерфейс на время ожидания.

READ ALSO
Объект класса в качестве поля другого класса. Объявление и определение. С++

Объект класса в качестве поля другого класса. Объявление и определение. С++

Помогите разобратьсяВ классе GameState есть приватное поле типа Level (level1)

392
Qt, C++ | Обращение к объектам формы

Qt, C++ | Обращение к объектам формы

Вопрос:как из функции-обработчика обратиться к объектам на форме Ui

311
while(cin) как выйти из данного цикла

while(cin) как выйти из данного цикла

Разбираю калькулятор из книги Страуструпа, лексемы вроде как считывает правильно, но не могу понять как выйти из циклаЕсли ввожу ctrl + z выдаёт...

344
Создать новый стек со значениями из другого стека

Создать новый стек со значениями из другого стека

Создать стек с числами в диапазоне от –50 до +50После создания стека выполнить индивидуальное задание

417