1

我正在使用 QProcess 与控制台应用程序进行通信:我正在写一些单词并读取输出。但我想通过 QProcess 写行。例如,我有下一个控制台应用程序:

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include <algorithm>

using namespace std;

int main(int argc, char* argv[])
{
    string action;
    do
    {
        cout << "(test)";
        cin >> action;
        cout << action;
        if(action.length() > 10)
        {
            cout << "\t very long string";
        }
        cout << endl;
    }
    while(action != "exit");
    return 0;
}

所以,我不能通过 QProcess::exec 或 QProcess::start 传递参数,因为它将参数传递给 char* argv[]。我应该在启动 QProcess 后通过它。我试过使用 QProcess::write,但有问题:如果我使用

process.write("oneWord\n");

我会成功的。但如果我使用

process.write("several words\n");

我的程序将单独写下所有这个词,它看起来像

process.write("several\n");
process.write("words\n");

控制台应用程序无法将其识别为一个字符串。我尝试过使用不同的方法:在双括号中写行,

process.write("\"several words"\\n");

process.write("\"several words\n""\);

使用受保护的方法QIODEvice::setOpenMode并设置QIODevice::Text标志,使用QDataStream,使用特殊符号,如,,\r以及不同的组合。另外,我尝试使用多个\n\tQProcess::write

process.write("several");
process.write("words\n");

我知道,QProcess 继承了 QIODevice 并且有机会像文件一样处理它(输入和输出)。但是单词是否会在文件中单独写入文件并不重要。就我而言,这确实很重要。

谁能帮我?

4

0 回答 0