QT: сделать функцию, чтобы сделать паузу в какой-то момент на некоторое время - PullRequest
2 голосов
/ 30 июня 2010

У меня проблема с 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 ]

3 голосов
/ 30 июня 2010

Некоторые возможности:

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 () может случиться что угодно).

3 голосов
/ 30 июня 2010

Попробуйте void QTest :: qSleep (int ms) или void QTest :: qWait (int ms)

Просмотр источника этих функций также полезен, если вы не хотите использовать служебную информацию QTest.

Больше информации на http://doc.qt.io/qt-5/qtest.html#qSleep

1 голос
/ 30 июня 2010

Может быть, вам просто нужно закрыть записанный файл перед вызовом другой программы:

QFile f;
...
f.close();

(Это также сбрасывает внутренние буферы, чтобы они записывались на диск)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...