gpt4 book ai didi

c++ - QProcess 没有完成创建文件

转载 作者:行者123 更新时间:2023-11-30 04:28:41 35 4
gpt4 key购买 nike

我只是想通过以下源代码用 QProcess 创建一个文件:

void Processmethod()
{

QDialog *ProcessMessage = new QDialog;
Ui::DialogProcessMessage Dialog;
Dialog.setupUi(ProcessMessage);
ProcessMessage->setModal(true);
ProcessMessage->setAttribute(Qt::WA_DeleteOnClose);
ProcessMessage->show();

processmethodONE();
}

void processmethodONE()
{
QString ProcessCommand = "w8 " + blablubli";

Prozess.setWorkingDirectory(Path); //QProcess "Prozess" is globaly defined
Prozess.setStandardOutputFile(Path); //in my class
Prozess.start(ProcessCommand);

QProcess::ExitStatus Status = Prozess.exitStatus();

if (Status == 0)
{
std::cout << "File created!" << std::endl;
}
}

此过程从位于 QString“路径”中的另一个文件创建一个新文件,让我称之为“PROFILE”(PRO 问题 :)。配置文件也已创建,但从未完成,我猜甚至连 50% 的文件都没有完成。就在使用的时候

while(!Prozess.waitForFinished())
{
qApp->processEvents();
std::cerr << "Process Create PROFile running " << std::endl;
}

文件已完全写入。此外,我尝试使用 QProcess finished(int) Signal 来启动另一个方法并删除了 while 循环(它卡住了整个 GUI)。我在构造函数中声明了它:

connect(&Prozess, SIGNAL(finished(int)), this, (SLOT(processmethodTWO())));

但我猜这不可能,因为第一个过程还没有完全完成。问题出在哪里?

最佳答案

不保证 Prozess.start(ProcessCommand); 进程将立即完成,因此调用“Prozess.exitStatus();”紧接着它会给你“误报”。您当然必须等到过程完成。您可以使用建议的 while 循环或 QEventLoop 来完成此操作

// ...
Prozess.setStandardOutputFile(Path); //in my class
QEventLoop loop;
connect(&Prozess, SIGNAL(error(QProcess::ProcessError)), &loop, SLOT(quit()));
connect(&Prozess, SIGNAL(finished(int, QProcess::ExitStatus)), &loop, SLOT(quit()));
Prozess.start();
loop.exec();
// Now your process status should be valid:
QProcess::ExitStatus Status = Prozess.exitStatus();

关于c++ - QProcess 没有完成创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9956304/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com