crossplatform.ru

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

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





Гости








    


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


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

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

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




Репутация:   94  


Цитата(Гость_Illin_* @ 26.10.2010, 16:54) *
Даже очень нужен рабочий пример...
ну вот под рукой есть код - работа с git'ом:
Раскрывающийся текст
YGit::YGit(QObject* p_parent)
    :QObject(p_parent)
    ,out(stdout)
    ,error(stderr)
{
    process = new QProcess(this);

    outCodec = QTextCodec::codecForName("IBM866");
    out.setCodec(outCodec);    
    error.setCodec(outCodec);
}

//...

bool YGit::checkout(QString name)
{

    QString outString;
    name = QDir::fromNativeSeparators(name);
    QString cmd = QString("%1\\git checkout %2").arg(m_gitPath).arg(name);

/*    out << "Creat Process:" << cmd;
    out.flush();*/
    
    cmd = cmd.toUtf8();
    
    process->setProcessChannelMode(QProcess::MergedChannels);
    process->start(cmd);
    if (!process->waitForStarted()){
        error << " - may not started" << endl << flush;
        return false;
    }

    QTime t;
    t.start();

    int sec = 1000; // 1000 ms
    int min = 60* sec; // 60 s
    int maxtime = 3*min;
    
    while(1){
        if (process->waitForReadyRead(maxtime)){
            outString += QString::fromUtf8(process->readAllStandardOutput().data());
            t.restart();
        }
        if (process->state() != QProcess::Running){
            if (process->exitCode() == 0){
                return true;
            }else{
                out << outString << flush;
                qDebug() << "Process" << cmd << "finished with error";
                return false;
            }
        }
        if (t.elapsed() >= maxtime){
            error << " - may not finished" << endl << flush;
            return false;
        }
    }

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Illin   Проблема со стандартными потоками IO в qt 4   26.10.2010, 12:01
- - panter_dsd   Побольше конкретики и кода.   26.10.2010, 12:23
|- - Гость   Цитата(panter_dsd @ 26.10.2010, 12:23) По...   26.10.2010, 12:34
- - panter_dsd   1. Что в переменной prog? 2. Что есть Convert::Byt...   26.10.2010, 12:39
- - Litkevich Yuriy   Цитата(panter_dsd @ 26.10.2010, 15:23) По...   26.10.2010, 12:41
- - Illin   в переменной prog - программа, которая должна полу...   26.10.2010, 12:49
- - panter_dsd   А программа prog точно ловит стандартный инпут?   26.10.2010, 12:50
|- - Illin   Да. Точно. Проверено сторонней программой. Да и к ...   26.10.2010, 12:59
- - Litkevich Yuriy   Гость_Illin_*, давай свой код, приёма данных из ст...   26.10.2010, 12:58
- - ernie   может проблема в QString?скажем в сокет её напряму...   26.10.2010, 13:02
|- - Illin   Цитата(ernie @ 26.10.2010, 13:02) может п...   26.10.2010, 13:06
- - Litkevich Yuriy   Цитата(ernie @ 26.10.2010, 16:02) может п...   26.10.2010, 13:03
- - Гость   Litkevich Yuriy, Подскажите, пожалуйста. Каким об...   26.10.2010, 13:12
- - Litkevich Yuriy   Цитата(Гость_Illin_* @ 26.10.2010, 16:06)...   26.10.2010, 13:23
|- - Illin   Цитата(Litkevich Yuriy @ 26.10.2010, 13:2...   26.10.2010, 13:29
- - kwisp   Цитата(Гость_Illin_* @ 26.10.2010, 14:29)...   26.10.2010, 13:33
|- - Illin   Это все я читал. Хочетцася рабочий пример.   26.10.2010, 13:36
|- - Illin   Даже очень нужен рабочий пример...   26.10.2010, 13:54
- - Litkevich Yuriy   Цитата(Гость_Illin_* @ 26.10.2010, 16:54)...   26.10.2010, 14:02


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


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




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