QProcess无法完成创建文件

时间:2012-03-31 13:31:40

标签: c++ qt qprocess

我只是想通过以下源代码创建一个带有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“Path”中一个新文件,让我称之为“PROFILE”(PRO for Problem :)。配置文件也已创建,但从未完成,我猜甚至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())));

但我想这不行,因为第一个过程没有完全完成。问题在哪里?

1 个答案:

答案 0 :(得分:2)

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();