Fortran Coder

查看: 7593|回复: 4
打印 上一主题 下一主题

[混编] 关于QT 调用外部.exe没有出现命令行窗口的问题

[复制链接]

25

帖子

10

主题

0

精华

熟手

F 币
158 元
贡献
82 点
跳转到指定楼层
楼主
发表于 2019-10-10 14:55:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 紫雪封尘 于 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);
}




分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2019-10-10 19:03:29 | 只看该作者
startDetached 可以的

25

帖子

10

主题

0

精华

熟手

F 币
158 元
贡献
82 点
板凳
 楼主| 发表于 2019-10-16 09:39:51 | 只看该作者
本帖最后由 紫雪封尘 于 2019-10-16 09:42 编辑

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

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

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

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

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

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

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
5#
发表于 2019-10-16 12:01:13 | 只看该作者
大概的思路如代码如下:
[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);
}
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-24 08:51

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表