【发布时间】:2012-03-31 13:31:40
【问题描述】:
我只是想通过以下源代码使用 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 for Problem :)。配置文件也已创建,但从未完成,我猜甚至 50% 的文件都没有完成。 就在使用时
while(!Prozess.waitForFinished())
{
qApp->processEvents();
std::cerr << "Process Create PROFile running " << std::endl;
}
文件已完全写入。 此外,我尝试使用 QProcess finished(int) 信号来启动另一个方法并删除了 while 循环(它冻结了整个 GUI)。我在构造函数中声明了它:
connect(&Prozess, SIGNAL(finished(int)), this, (SLOT(processmethodTWO())));
但我猜这行不通,因为第一个过程还没有完全完成。问题出在哪里?
【问题讨论】:
-
“伟大的”评论老兄。如果你能告诉我你的意思会很好吗?这是一个论坛! :P
-
称我为迂腐和愚蠢,但是 1) 给函数起一个带有“函数”或“方法”的名称是愚蠢的(尽管对于一个纯粹的例子,这有助于传达你的信息,所以不要t 在现实生活中的代码中执行此操作)和 2)“方法”是 Java 主义。在 C 或 C++ 标准中没有任何地方使用过这个术语,想到 Java 程序员正在尝试学习 C++ 让我不寒而栗。没什么私人的
;-) -
1) 是的,我这样做是为了举例,因为我不是真正的专业程序员,我这样做只是为了让它更清楚,但显然每个优秀的程序员都会首先看到这是一种方法看法 :)。 2)是的,没错,我从 Java 开始,因此想到了“方法”这个名字,但是当我是对的时候,我也看过/阅读了一些德国 c++ 教程,他们使用了“方法”这个名字,并告诉“函数”是更多的数学符号(如 intz = x+y)。 ;)