Fortran Coder

标题: 关于QT 调用外部.exe没有出现命令行窗口的问题 [打印本页]

作者: 紫雪封尘    时间: 2019-10-10 14:55
标题: 关于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);
}





作者: vvt    时间: 2019-10-10 19:03
startDetached 可以的
作者: 紫雪封尘    时间: 2019-10-16 09:39
本帖最后由 紫雪封尘 于 2019-10-16 09:42 编辑

您好 ,我使用startDetached,确实没有出现我想要的命令行窗口,而是在应用程序输出上显示出来的。附截图如下:

)[%VS$YT67M8OUC{U328R~O.png (47.85 KB, 下载次数: 197)

)[%VS$YT67M8OUC{U328R~O.png

作者: vvt    时间: 2019-10-16 11:57
1. 一般人用GUI调用Console,都不想看到命令行出现。比如Qt Creator 调用 mingw-g++ 就是这样
如果你想显示输出,你可以用 QTextEditor 检测 QProcess 的标准输出。
了解一下 QProcess 的 readyReadStandardOutput 信号和 readAllStandardOutput 成员函数。
在界面上显示输出,比弹出一个 Console 界面更友好。

2. 如果你确实想看见Console界面,可以试试调用
"cmd /k Consoleadd.exe"
注意路径问题。不小心的话,会找不到路径,并且没有任何提示。


作者: vvt    时间: 2019-10-16 12:01
大概的思路如代码如下:
[C++] 纯文本查看 复制代码

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





欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2