我遇到了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;
}
提前致谢。
答案 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的开销,那么查看这些函数的来源也很有用。
的更多信息答案 2 :(得分:1)
也许您只需要在调用其他程序之前关闭写入的文件:
QFile f;
...
f.close();
(这也会刷新内部缓冲区,以便将它们写入磁盘)