我正在尝试使用Qt为简单的C ++实现GUI,以了解它的工作原理。 C ++程序和GUI在VS 2015中的相同解决方案中处于单独的项目中.Qt程序将使用QProcess的start()函数调用C ++程序。如果Qt程序充当接口,C ++控制台应用程序将运行后台。我的问题是,如何使用QProcess将值传递给C ++程序,如何从C ++程序获取输出?以下是我正在使用的示例程序: -
C ++程序
#include<iostream>
#include<fstream>
using namespace std;
void main() {
int a;
cout << "Enter a number" << endl;
cin >> a;
cout << "The Square of the number is " << (a*a) << endl;
ofstream write;
write.open("test.txt");
write << (a * a);
write.close();
}
Qt计划
#include "FrontEnd.h"
#include <QtWidgets/QApplication>
#include <qprocess.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
FrontEnd w;
w.show();
QProcess p1;
p1.start("Interface.exe");
p1.write("5",5);
return a.exec();
}
我尝试使用write()函数传递该值,但它似乎不起作用,因为test.txt文件保持为空。我编写的Qt程序缺少GUI功能,因为一旦我弄清楚如何使用QProcess发送和接收数据,我将添加它们。谢谢你的帮助!
答案 0 :(得分:0)
您所显示的代码中存在许多问题:
您正在传递write
两个参数MAX
和"5"
,这意味着它将使用5
{中的char
个char*
{1}}。当然,这不是您想要的,因为这将导致访问不属于您的数据的内存导致的未定义行为。
相反,您应该使用接受零终止字符串的second version of write
,如下所示:"5"
为了让你的控制台程序中的p1.write("5");
知道它应该读取的号码已经完成,你应该在你的号码后面换一个新行,这样你的通话就会最终是这样的:cin
当您的流程有可以阅读的新输出时,您应该使用Qt程序中的readyRead
信号获得通知,然后您可以拨打{{3}来自连接到该信号的插槽。
为了完整性,以下是您的代码应该如何:
p1.write("5\n");
#include<iostream>
using namespace std;
void main() {
int a;
cin >> a;
//No need to use file output
//it is simpler and more appropriate to read the output from stdout
cout << "The Square of the number is " << (a*a) << endl;
}