QT:让功能在某个时刻停顿一段时间

时间:2010-06-30 12:47:14

标签: 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 个答案:

答案 0 :(得分:3)

一些可能性:

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()期间,任何事情都可能发生)。

答案 1 :(得分:3)

尝试void QTest :: qSleep(int ms)或void QTest :: qWait(int ms)

如果您不想要QTest的开销,那么查看这些函数的来源也很有用。

http://doc.qt.io/qt-5/qtest.html#qSleep

的更多信息

答案 2 :(得分:1)

也许您只需要在调用其他程序之前关闭写入的文件:

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

(这也会刷新内部缓冲区,以便将它们写入磁盘)