QT: créer une fonction pour faire une pause à un moment donné pendant un certain temps

j'ai un problème de QT. Je veux faire mon programme s'arrête à l'endroit où je définir, disons pendant 3 secondes. Je ne parvenais pas à le faire. J'ai besoin de ça, car correspondante mon programme génère un fichier et il est utilisé par un programme que j'appelle un peu plus tard. Le problème est que ce fichier ne semble pas avoir assez de temps pour créer. Mon code ressemble à ceci:

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;
}

Merci d'avance.

2
qt
demandé sur sth 2010-06-30 16:47:13

3 réponses

peut-être que vous avez juste besoin de fermer le fichier écrit avant d'appeler l'autre programme:

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

(ce qui élimine aussi les tampons internes de sorte qu'ils sont écrits sur le disque)

1
répondu sth 2010-06-30 12:55:47

quelques possibilités:

1) Utilisez une autre fente pour les choses à faire après le sommeil:

QTimer::singleShot(3000, this, SLOT(anotherSlot());
...
void MyClass::anotherSlot() {
    system(...);
}

2) sans autre slot, en utilisant une boucle locale d'événement:

//write file
QEventLoop loop;
QTimer::singleShot(3000, &loop, SLOT(quit()) );
loop.exec();
//do more stuff

j'éviterais la boucle locale d'événements et préférerais 1) cependant, les boucles locales d'événements peuvent causer une pléthore de bogues subtils (pendant la boucle.exec(), tout peut arriver).

3
répondu Frank Osterfeld 2010-06-30 13:45:10

Essayer vide QTest::qSleep ( int ms ) ou nulle QTest::qWait ( int ms )

regarder dans la source de ces fonctions est également utile si vous ne voulez pas les frais généraux de QTest.

plus d'informations à http://doc.qt.io/qt-5/qtest.html#qSleep

3
répondu Chris 2015-09-22 06:17:55