使用QProcess实现c ++控制台应用程序的前端

时间:2016-09-15 18:15:33

标签: c++ qt qprocess

我正在尝试使用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发送和接收数据,我将添加它们。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您所显示的代码中存在许多问题:

  1. 您正在传递write两个参数MAX"5",这意味着它将使用5 {中的charchar* {1}}。当然,这不是您想要的,因为这将导致访问不属于您的数据的内存导致的未定义行为。

    相反,您应该使用接受零终止字符串的second version of write,如下所示:"5"

  2. 为了让你的控制台程序中的p1.write("5"); 知道它应该读取的号码已经完成,你应该在你的号码后面换一个新行,这样你的通话就会最终是这样的:cin

  3. 当您的流程有可以阅读的新输出时,您应该使用Qt程序中的readyRead信号获得通知,然后您可以拨打{{3}来自连接到该信号的插槽。

  4. 为了完整性,以下是您的代码应该如何:

    interface.cpp

    p1.write("5\n");

    Qt计划

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