我正在使用 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
\t
QProcess::write
process.write("several");
process.write("words\n");
我知道,QProcess 继承了 QIODevice 并且有机会像文件一样处理它(输入和输出)。但是单词是否会在文件中单独写入文件并不重要。就我而言,这确实很重要。
谁能帮我?