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() может произойти все что угодно).

Другие вопросы по тегам