2012-03-31 31 views
1

我只是想通过下面的源代码创建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的“路径”的另一个文件的新文件,让我称之为“配置文件”(PRO for Problem :)。配置文件也被创建,但从来没有完成,我想即使文件的50%都没有完成。 正当使用

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

该文件被完全写入。 此外,我试图使用QProcess完成(int)信号启动另一种方法,并删除while循环(冻结整个GUI)。我在构造函数中声明:

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

但我想这不能工作,因为第一个进程没有完全完成。哪里有问题?

+1

'... ... method' rubenvb 2012-03-31 14:28:39

+0

“伟大”的评论花花公子。如果你能告诉我你的意思是什么,会不会很好?这是一个论坛! :P – Streight 2012-04-01 13:54:26

+0

叫我迂腐和愚蠢的,但1)给函数一个名称与“功能”或“方法”在他们是愚蠢的(虽然对于一个纯粹的例子,这有助于传达你的信息,所以只是不要做到真正的生活代码)和2)“方法”是一个Java-ISM。 C或C++标准中没有其他地方使用过这个术语,它让我不寒而栗,认为Java程序员正在尝试学习C++。没有个人的';-)' – rubenvb 2012-04-01 14:52:30

回答

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

我试过你的提议,但包括你的源代码QProcess“Prozess”不再启动了...... – Streight 2012-03-31 14:48:40

+0

忘记在loop.exec()之前添加Prozess.start()。 – 2012-03-31 20:10:14

+0

我不明白这和调用'waitForFinished()'有什么不同。他们都阻止。 'waitForFinished()'是同样的事情。 – jdi 2012-03-31 20:17:52