关于QT 调用外部.exe没有出现命令行窗口的问题
本帖最后由 紫雪封尘 于 2019-10-10 14:57 编辑我使用qt creator5.12的64位版本 ,使用Qprocess start我需要的Fortran的.exe程序,但是却没有出现我所希望出现的.exe的命令行窗口,输出结果却在qt creator的输出位置输出了出来,之前用qt4 没有出现这种情况 ,请问这个和版本有关系嘛?还是别的原因。附简单加法程序:
void Widget::on_pushButton_clicked(){
int a,b;
b=ui->lineEdit->text().toInt();
a=ui->lineEdit_2->text().toInt();
QString program = "Consoleadd.exe";//用Fortran写的简单的加法程序
QStringList arguments;
arguments << QString::number(a)
<< QString::number(b);
QProcess *myProcess = new QProcess();
myProcess->start(program, arguments);
myProcess->execute(program, arguments);
// myProcess->startDetached(program, arguments);
}
startDetached 可以的 本帖最后由 紫雪封尘 于 2019-10-16 09:42 编辑
您好 ,我使用startDetached,确实没有出现我想要的命令行窗口,而是在应用程序输出上显示出来的。附截图如下:
1. 一般人用GUI调用Console,都不想看到命令行出现。比如Qt Creator 调用 mingw-g++ 就是这样
如果你想显示输出,你可以用 QTextEditor 检测 QProcess 的标准输出。
了解一下 QProcess 的 readyReadStandardOutput 信号和 readAllStandardOutput 成员函数。
在界面上显示输出,比弹出一个 Console 界面更友好。
2. 如果你确实想看见Console界面,可以试试调用
"cmd /k Consoleadd.exe"
注意路径问题。不小心的话,会找不到路径,并且没有任何提示。
大概的思路如代码如下:
pro = new QProcess();
pro->setProgram(fname);
pro->setWorkingDirectory(globals->gAppDataPath+"\\temp\\");
pro->setNativeArguments("命令行参数");//如果有命令行参数,可以这样
pro->setStandardInputFile(qApp->applicationDirPath().append("\\CMDRedirect.lst"));//如果有标准输入可以这样
connect(pro, SIGNAL(readyReadStandardOutput()), this, SLOT(on_cmdOutput()));
connect(pro, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(on_proc_finished(int, QProcess::ExitStatus)));
pro->start();
bOK = pro->waitForStarted(1000);
pro->waitForFinished(2000); //可以等2秒完成。也可以不等
void YourClass::on_cmdOutput(){
QString s(pro->readAllStandardOutput());
ui->textEditor->append(s);
}
页:
[1]