从外部 c++ 程序获取结果
Posted
技术标签:
【中文标题】从外部 c++ 程序获取结果【英文标题】:Get result from external c++ program 【发布时间】:2021-09-18 16:39:45 【问题描述】:我在我的 ubuntu18 中安装了 Qt creator 5.15。
我查看了如何在 Qtcreator 上用 C++ 绘制图形的文档,并希望使用 Qprocess 从名为“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++ 程序获取结果的主要内容,如果未能解决你的问题,请参考以下文章
LNK2019:错误。使用 InternetOpen InternetReadFIle 的 C++ 程序中未解析的外部符号