LINUX.ORG.RU

Qt process


0

0

Всех приветсвую. Подскажите пожалуйста каим образом можна перенаправить вывод деятельности процеса, вызванного из приложения в скажем объект lineEdit? Обязатьельным условием вывода есть синхронный вывод информации во время выполнения процесса в lineEdit. К примеру я нажимаю на кнопку в главном окне приложения Qt и результаты работы программы - весь вывод синхронно выводится в lineEdit. Если это упростит задачу, то у меня четвёртая кутешка.


Как-то так:

#include <QProcess>
#include <QApplication>
#include <QTextEdit>

class MyProcess: public QProcess
{
        Q_OBJECT
public:
        MyProcess(QObject *parent) : QProcess(parent)
        {
                connect(this, SIGNAL(readyReadStandardOutput ()),
                                SLOT(readOutput()));
        };

signals:
        void outputReceived(const QString& text);

private slots:
        void readOutput()
        {
               emit outputReceived(QString::fromLocal8Bit(readAllStandardOutput()));
        }
};

int main(int argc, char **argv)
{
        QApplication *app = new QApplication(argc, argv);

        QTextEdit *text = new QTextEdit();
        text->show();

        MyProcess *r = new MyProcess(app);
        QObject::connect(r, SIGNAL(outputReceived(const QString&)),
                        text, SLOT(insertPlainText(const QString&)));
        QStringList args;
        args << "-c" << "for i in {1..5}; do echo $i; sleep 1; done";
        r->start("sh", args);

        return app->exec();
}

#include "qprocess.moc"

ero-sennin ★★
()
Ответ на: комментарий от lnkgyv

Как и обещал. Итак вывод работы процесса в lineEdit. Могу где-то ощибится, но главное - идея(Qt4): 1. Опишем QProcess process; в мемберах формы. 2. После setup(Ui); в конструкторе инициализации Form связываем сигнал connect(&process,SIGNAL(readyStandardOutput()),this,SLOT(updateOutput())); 3. Реализуем updateOutput(); - метод вывода в окно textEdit(): void Form::updateOutput(){ QDataArray data->getAllStandardOutput(); QString text(data); textEdit->insertPlainText(text);} Вот собственно и всё.

lnkgyv
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.