从外部 c++ 程序获取结果

Posted

技术标签:

【中文标题】从外部 c++ 程序获取结果【英文标题】:Get result from external c++ program 【发布时间】:2021-09-18 16:39:45 【问题描述】:

我在我的 ubuntu18 中安装了 Qt creator 5.15。

我查看了如何在 Qtcreator 上用 C++ 绘制图形的文档,并希望使用 Qpr​​ocess 从名为“test”的外部测试 C++ 程序中获取数据。

这是一个简单的 main.cpp:

#include <iostream>
#include <iostream>
#include "ZFraction.h"

using namespace std;

int main()

    ZFraction a(4,5);      
    ZFraction b(2);        
    ZFraction c,d;         

   c = a+b;              
   d = a*b;               

    cout << a << " + " << b << " = " << c << endl;

    cout << a << " * " << b << " = " << d << endl;

    return 0;


这是我的 Qt 创建程序:

#include "mafenetre.h"
#include "ui_mafenetre.h"

//using namespace QtCharts;

const quint64 start=QDateTime::currentSecsSinceEpoch();
const int limiteRandom=2;


Mafenetre::Mafenetre(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Mafenetre)

    ui->setupUi(this);
    myprocess = new QProcess(this);
    

    QString program = ("./test");
    arguments << " ";

    myprocess->start(program, arguments);
    //myprocess->waitForReadyRead();

    connect(monTimer,SIGNAL(timeout()),this,SLOT(refresh_graph()));
    connect(myprocess,SIGNAL(readyReadStandardOutput()),this,SLOT(readyReadStandardOutput()));
    connect(myprocess,SIGNAL(readyReadStandardError()),this,SLOT(readyReadStandardError()));


void Mafenetre::readyReadStandardOutput()
    qDebug()<< myprocess->readAllStandardOutput();
 


void Mafenetre::readyReadStandardError()
    qDebug() << myprocess->readAllStandardError();


Mafenetre::~Mafenetre()

    delete ui;



我的问题来自 c++ 程序,如何将“d”或“c”变量的结果作为 Qtcreator 程序的输入?

【问题讨论】:

由于外部程序将方程写入标准输出,因此您需要解析readAllStandardOutput给出的结果以提取您想要的值。 这就是 qDebug()readAllStandardOutput();应该制作,但终端输出中没有显示任何内容。为什么? 我想出的最简单的方法是写文件和读文件 【参考方案1】:

您必须在连接后启动程序

#include "mafenetre.h"
#include "ui_mafenetre.h"

//using namespace QtCharts;

const quint64 start=QDateTime::currentSecsSinceEpoch();
const int limiteRandom=2;


Mafenetre::Mafenetre(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Mafenetre)

    ui->setupUi(this);
    myprocess = new QProcess(this);
    

    QString program = ("./test");
    arguments << " ";
    connect(myprocess,SIGNAL(readyReadStandardOutput()),this,SLOT(readyReadStandardOutput()));
    connect(myprocess,SIGNAL(readyReadStandardError()),this,SLOT(readyReadStandardError()));

    myprocess->start(program, arguments);
    //myprocess->waitForReadyRead();

    connect(monTimer,SIGNAL(timeout()),this,SLOT(refresh_graph()));
   


void Mafenetre::readyReadStandardOutput()
    qDebug()<< myprocess->readAllStandardOutput();
 


void Mafenetre::readyReadStandardError()
    qDebug() << myprocess->readAllStandardError();


Mafenetre::~Mafenetre()

    delete ui;

【讨论】:

以上是关于从外部 c++ 程序获取结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AnyLogic 7 中从外部源获取资源容量?

循环获取外部 api。 prev 不可迭代

如何从外部数组中获取内部数组

如何从应用程序外部获取我的 Toast 通知?

LNK2019:错误。使用 InternetOpen InternetReadFIle 的 C++ 程序中未解析的外部符号

如何调用外部程序并从另一个程序获取其输出