Каналы Qt и Linux - PullRequest
       8

Каналы Qt и Linux

1 голос
/ 13 марта 2012

Я написал программу, которая удаляет теги с веб-сайта HTML, которые указывает пользователь. Я знаю, как создать программу с графическим интерфейсом, чтобы позволить пользователю вводить URL.

У меня есть следующий код, который открывает канал для открытия созданного мной исполняемого файла, который обрабатывает ввод из программы QT.

    QString stringURL = ui->lineEdit->text();
    const char* result;

    ui->labelError->clear();
    if(stringURL.isEmpty() || stringURL.isNull()) {
        ui->labelError->setText("You have not entered a URL.");
        stringURL.clear();
        return;
    }

    std::string cppString = stringURL.toStdString();
    const char* cString = cppString.c_str();

    FILE *fid;
    fid = popen("htmlstrip", "w");    //Note that this application is in the PATH
    fprintf(fid, "%s\n", cString);    //Send URL
    pclose(fid);

Однако приведенный выше код позволяет мне только писать в канал. Может кто-нибудь сказать мне, как я позволю программе Qt отправлять ввод в исполняемый файл, а затем получать вывод из исполняемого файла, как только он выполнит обработку, и поместить его в текстовое поле / текстовое поле в программе Qt?

1 Ответ

2 голосов
/ 13 марта 2012

Вы можете избежать c труб, используя QProcess .

#include <QDebug>
#include <QProcess>
#include <QString>

int main()
{
    QProcess echo;

    // call your program (e.g. echo) and add your input as argument
    echo.start("echo", QStringList() << "foo bar");

    // wait until your program has finished 
    if (!echo.waitForFinished())
        return 1;

    // read the output
    qDebug() << echo.readAll();

    return 0;
}
...