Russian Qt Forum

Qt => Вопросы новичков => Тема начата: helga1917 от Август 30, 2013, 13:20



Название: вопросы по QProcess
Отправлено: helga1917 от Август 30, 2013, 13:20
Добрый день, помогите пожалуйста понять, как процесс QProcess передает данные в основную программу.
Для примера процесс - приложение, которое выводит строчку в консоль, а основная программа должна считать ее и вывести в свою консоль.

процесс textForProcess:
Код:
#include <QDebug>
int main()
{
qDebug()<<"text";
return 0;
}

срр:
Код:
#include "mainwindow.h"
MainWindow::MainWindow()

{
   more = new QProcess(this);
   more->start("C:/Qt_myProgramm/build-textForProcess-Desktop-Debug/debug/textForProcess"); //путь до .exec
  connect (more, SIGNAL(readyRead()),SLOT(write()));
}

void MainWindow::write()
{
qDebug()<<more->readAllStandardOutput();
}

h:
Код:
#include <QProcess>
#include <QDebug>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow();
    QProcess *more;
public slots:
   void write();
};

#endif // MAINWINDOW_H
Компилируется, но в консоли ничего не появляется.
QProcess посылает сигнал readyRead(), когда в текущем канале чтения доступны данные.(процесс передает в канал строку "text", это те данные, которые доступны для чтения?)


Название: Re: вопросы по QProcess
Отправлено: Alex Custov от Август 30, 2013, 13:54
qDebug пишет в stderr.


Название: Re: вопросы по QProcess
Отправлено: helga1917 от Август 30, 2013, 14:06
получается, чтобы вывести в qDebug нужно переключить канал?
добавила в срр
Код:
more->setReadChannel(QProcess::StandardError);
, в консоли появилось ""


Название: Re: вопросы по QProcess
Отправлено: Alex Custov от Август 30, 2013, 14:09
читайте документацию и думайте головой, за вас это никто делать не будет.


Название: Re: вопросы по QProcess
Отправлено: helga1917 от Август 30, 2013, 14:15
мне разобраться надо, в документации не все понятно


Название: Re: вопросы по QProcess
Отправлено: Bepec от Август 30, 2013, 14:40
В документации всё написано. Лучшая документация что я видел.


Название: Re: вопросы по QProcess
Отправлено: helga1917 от Сентябрь 02, 2013, 14:39
все же не получается самостоятельно справиться с этой проблемой. Как правильно данные из канала вывода процесса передать в LineEdit?
процесс:
Код:
#include <QFile>
#include <QTextStream>
#include <QString>
int main()
{   
   QFile outFile;
    outFile.setFileName("out.txt");
    QTextStream stream (&outFile);
    outFile.open(QIODevice::ReadWrite);
    QString str;
    str=stream.readAll();
    stream<<str;//записывает в файл
    outFile.close();
return 0;
}

cpp:
Код:
#include "mainwindow.h"
#include <iostream>
using namespace std;
MainWindow::MainWindow()

{
    lineEdit = new QLineEdit;
    lay = new QHBoxLayout;
    lay->addWidget(lineEdit);
    setLayout(lay);

    process = new QProcess(this);
    process->setProcessChannelMode(QProcess::MergedChannels);
    connect(process, SIGNAL(readyRead()), this, SLOT(output()));
    process->start("C:/Qt_myProgramm/build-untitled4-Desktop-Debug/debug/untitled4");
    process->waitForStarted(10000);
 
   

void MainWindow::output()
{
   QByteArray array = process->readAllStandardOutput();
    QTextStream stream2(array);
    QString str2 = stream2.readAll();
    lineEdit->setText(str2);

}


Название: Re: вопросы по QProcess
Отправлено: helga1917 от Сентябрь 02, 2013, 15:37
даже если прописать в процесс стандартную библиотечную функцию записи в поток вывода
Код:
putchar('y');

сигнал readyRead() не испускается. подскажите, почему?


Название: Re: вопросы по QProcess
Отправлено: helga1917 от Сентябрь 02, 2013, 18:10
разобралась, надо использовать ф-ю waitForReadyRead(); :)