Как получить возвращенный стандартный вывод программы, вызываемой с помощью QProcess?

Я пишу программу на Qt и в настоящее время использую popen для запуска команды linux и чтения вывода в строку:

    QString Test::popenCmd(const QString command) {
    FILE *filePointer;
    int status;
    int maxLength = 1024;
    char resultStringBuffer[maxLength];
    QString resultString = "";

    filePointer = popen(command.toStdString().c_str(), "r");
    if (filePointer == NULL) {
        return 0;
    }

    while (fgets(resultStringBuffer, maxLength, filePointer) != NULL) {
        resultString += resultStringBuffer;
    }
    status = pclose(filePointer);
    if (status == 0) {
        return resultString;
    } else {
        return 0;
    }
}

Поэтому я хотел бы выбросить приведенный выше код, так как я предпочел бы использовать средства более высокого уровня, предоставляемые Qt, если это возможно. У кого-нибудь есть пример того, как сделать это с QProcess или хотя бы приблизительное представление о том, как это можно сделать?

Для чего это стоит, это будет работать на Linux.

Спасибо

1 ответ

Решение

Делай так:

void Process::runCommand(const QString &p_Command) {
    QProcess *console = new QProcess();
    console->connect(console, SIGNAL(readyRead()), this, SLOT(out()));
    console->connect(console, SIGNAL(finished(int)), this, SLOT(processFinished(int)));
    console->start(p_Command);
}

void Process::out() {
    QProcess *console = qobject_cast<QProcess*>(QObject::sender());
    QByteArray processOutput = console->readAll();
}

void Process::processFinished(int p_Code) {
    QProcess *console = qobject_cast<QProcess*>(QObject::sender());
    QByteArray processOutput = console->readAll() + QString("Finished with code %1").arg(p_Code).toLatin1();
}

Сигнал QProcess::finished() может быть использован для получения кода выхода процесса.

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