QT: сделать функцию, чтобы сделать паузу в какой-то момент на некоторое время
У меня проблема с QT. Я хочу, чтобы моя программа остановилась на месте, где я определяю, скажем, на 3 секунды. Я не мог сделать это. Мне это нужно, потому что раньше моя программа генерирует файл, и он используется программой, которую я вызываю чуть позже. Проблема в том, что у этого файла не хватает времени для создания. Мой код выглядит так:
void MainWindow::buttonHandler()
{
QFile ..... (creating a text file);
//Making a stream and writing something to a file
//A place where program should pause for 3 seconds
system("call another.exe"); //Calling another executable, which needs the created text file, but the file doesn`t seem to be created and fully written yet;
}
Заранее спасибо.
3 ответа
Может быть, вам просто нужно закрыть записанный файл перед вызовом другой программы:
QFile f;
...
f.close();
(Это также сбрасывает внутренние буферы, чтобы они записывались на диск)
Попробуйте void QTest::qSleep ( int ms) или void QTest::qWait ( int ms)
Изучение источника этих функций также полезно, если вы не хотите накладных расходов на QTest.
Более подробная информация на http://doc.qt.io/qt-5/qtest.html
Некоторые возможности:
1) Используйте другой слот для вещей после сна:
QTimer::singleShot(3000, this, SLOT(anotherSlot());
...
void MyClass::anotherSlot() {
system(...);
}
2) Без другого слота, используя локальный цикл обработки событий:
//write file
QEventLoop loop;
QTimer::singleShot(3000, &loop, SLOT(quit()) );
loop.exec();
//do more stuff
Я бы избегал локального цикла событий и предпочел бы 1), хотя локальные циклы событий могут вызывать множество тонких ошибок (во время loop.exec() может произойти все что угодно).