Qt | QProcess | Написать строку в консольное приложение

Я использую 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 и есть возможность работать с ним как с файлом (ввод и вывод). Но не имеет значения, будут ли слова записаны в файл отдельно в файле. В моем случае это имеет значение.

Может кто-нибудь мне помочь?

1 ответ

Я думаю, что этот ответ касается вашей проблемы.

Другие вопросы по тегам