Russian Qt Forum
Ноябрь 24, 2024, 23:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: вопросы по QProcess  (Прочитано 3660 раз)
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", это те данные, которые доступны для чтения?)
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Август 30, 2013, 13:54 »

qDebug пишет в stderr.
Записан
helga1917
Гость
« Ответ #2 : Август 30, 2013, 14:06 »

получается, чтобы вывести в qDebug нужно переключить канал?
добавила в срр
Код:
more->setReadChannel(QProcess::StandardError);
, в консоли появилось ""
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Август 30, 2013, 14:09 »

читайте документацию и думайте головой, за вас это никто делать не будет.
Записан
helga1917
Гость
« Ответ #4 : Август 30, 2013, 14:15 »

мне разобраться надо, в документации не все понятно
Записан
Bepec
Гость
« Ответ #5 : Август 30, 2013, 14:40 »

В документации всё написано. Лучшая документация что я видел.
Записан
helga1917
Гость
« Ответ #6 : Сентябрь 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);

}
Записан
helga1917
Гость
« Ответ #7 : Сентябрь 02, 2013, 15:37 »

даже если прописать в процесс стандартную библиотечную функцию записи в поток вывода
Код:
putchar('y');

сигнал readyRead() не испускается. подскажите, почему?
Записан
helga1917
Гость
« Ответ #8 : Сентябрь 02, 2013, 18:10 »

разобралась, надо использовать ф-ю waitForReadyRead(); Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.