crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Проблема со стандартными потоками IO в qt 4
Гость_Illin_*
сообщение 26.10.2010, 12:01
Сообщение #1





Гости








    


Версия qt - 4.4.3.
Новичок в qt
Проблема в следующем: есть программа, которой надо послать в стандартный поток ввода данные и получить ответ через стандартный поток вывод
Для записи в поток использовал метод write - программа ничего не получает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 26.10.2010, 12:23
Сообщение #2


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Побольше конкретики и кода.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 26.10.2010, 12:34
Сообщение #3





Гости








    


Цитата(panter_dsd @ 26.10.2010, 12:23) *
Побольше конкретики и кода.

Раскрывающийся текст
class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    Ui::Dialog *ui;
    QProcess proc;
private slots:
    void on_pbSendText_clicked();
    void on_pbStopProcess_clicked();
    void on_pbStartProcess_clicked();
    void showStdOut();
    void showErrOut();
    void processStoped(int _exitCode);
    void timerTime();
};


Раскрывающийся текст
QString prog = "/usr/test_console/test_console";

Dialog::Dialog(QWidget *parent)
    : QDialog(parent), ui(new Ui::Dialog)
{
    ui->setupUi(this);
    connect(&proc, SIGNAL(readyReadStandardOutput()), this, SLOT(showStdOut()));
    connect(&proc, SIGNAL(readyReadStandardError()), this, SLOT(showErrOut()));
    connect(&proc, SIGNAL(finished(int)), this, SLOT(processStoped(int)));
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(timerTime()));
    timer->start();
}

Dialog::~Dialog()
{
    delete ui;
    proc.terminate();
}

void Dialog::on_pbStartProcess_clicked()
{

  QStringList arg;
  proc.setProcessChannelMode(QProcess::MergedChannels);
  proc.start(prog, arg, QIODevice::ReadWrite | QIODevice::Unbuffered);
  if(proc.waitForStarted())
    {
      ui->pteStdOut->appendPlainText(QString("рТПГЕУУ: %1 ЪБРХЭЕО").arg(prog));
      ui->pteStdOut->appendPlainText(proc.readAllStandardOutput());
      ui->pbStartProcess->setEnabled(false);
      ui->pbStopProcess->setEnabled(true);
    }
  else
    {
      ui->pteStdOut->appendPlainText(QString("оЕ ЪБРХУЛБЕФУС РТПГЕУУ: %1").arg(prog));
      ui->pbStartProcess->setEnabled(true);
      ui->pbStopProcess->setEnabled(false);
    }

}

void Dialog::on_pbStopProcess_clicked()
{
  if(proc.state() == QProcess::Running)
  {
     proc.terminate();
     ui->pteStdOut->appendPlainText(QString("рТПГЕУУ: %1 ПУФБОПЧМЕО").arg(prog));
     ui->pbStartProcess->setEnabled(true);
     ui->pbStopProcess->setEnabled(false);
  }
}

void Dialog::on_pbSendText_clicked()
{
  QByteArray data = Convert::StringToBytes(ui->leSendText->text());
  proc.write(data);
}

void Dialog::showStdOut()
{
  ui->pteStdOut->appendPlainText(Convert::BytesToString(proc.readAllStandardOutput()));
}

void Dialog::showErrOut()
{
  ui->pteErrOut->appendPlainText(QString::fromLocal8Bit(proc.readAllStandardError()));
}

void Dialog::processStoped(int _exitCode)
{
     ui->pbStartProcess->setEnabled(true);
     ui->pbStopProcess->setEnabled(false);
}

void Dialog::timerTime()
{

}
Причина редактирования: теги!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 26.10.2010, 12:39
Сообщение #4


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


1. Что в переменной prog?
2. Что есть Convert::BytesToString?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.10.2010, 12:41
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(panter_dsd @ 26.10.2010, 15:23) *
Побольше конкретики и кода.
+1
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Illin_*
сообщение 26.10.2010, 12:49
Сообщение #6





Гости








    


в переменной prog - программа, которая должна получать данные
BytesToString - преобразование массива байт в строку по определенному алгоритму.
Это ведь все не очень важно. Дело в том, что proc.write(data) не вызывает никаких реакций у программы
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 26.10.2010, 12:50
Сообщение #7


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


А программа prog точно ловит стандартный инпут?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.10.2010, 12:58
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Гость_Illin_*, давай свой код, приёма данных из стандартного ввода
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Illin_*
сообщение 26.10.2010, 12:59
Сообщение #9





Гости








    


Да. Точно. Проверено сторонней программой. Да и к самой программе есть описание.
А можно какой-нить пример использования write(). В qt3 было проще - там был writeToStdin().
Может есть какие-нить особенности при использовании write()?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ernie
  опции профиля:
сообщение 26.10.2010, 13:02
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 13.5.2010
Из: Irkutsk
Пользователь №: 1712

Спасибо сказали: 11 раз(а)




Репутация:   1  


может проблема в QString?скажем в сокет её напрямую нельзя писать,если правильно помню,попробуй вместо QString скажем int отправить,какой результат будет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 3:33