crossplatform.ru

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


  Ответ в Проблема со стандартными потоками IO в qt 4
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 26.10.2010, 14:02
 
Цитата(Гость_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 Дата 26.10.2010, 13:54
  Даже очень нужен рабочий пример...
Illin Дата 26.10.2010, 13:36
  Это все я читал. Хочетцася рабочий пример.
kwisp Дата 26.10.2010, 13:33
 
Цитата(Гость_Illin_* @ 26.10.2010, 14:29) *
P.S. Можно, если есть, выложить пример кода работы с QProcess

уже давно выложили
тут
+
поищи по форуму QProcess - многое найдёшь.
Illin Дата 26.10.2010, 13:29
 
Цитата(Litkevich Yuriy @ 26.10.2010, 13:23) *
Цитата(Гость_Illin_* @ 26.10.2010, 16:06) *
А кода программы нет.
как так?



Программа чужая. Код своей программы я выложил выше.

P.S. Можно, если есть, выложить пример кода работы с QProcess (желательно с тестовым приложением)?
Litkevich Yuriy Дата 26.10.2010, 13:23
 
Цитата(Гость_Illin_* @ 26.10.2010, 16:06) *
А кода программы нет.
как так?
Гость Дата 26.10.2010, 13:12
  Litkevich Yuriy,
Подскажите, пожалуйста. Каким образом проверить, осуществилась ли запись в стандартный поток ввода, то есть выполнился ли мой prog.write()?
Illin Дата 26.10.2010, 13:06
 
Цитата(ernie @ 26.10.2010, 13:02) *
может проблема в QString?скажем в сокет её напрямую нельзя писать,если правильно помню,попробуй вместо QString скажем int отправить,какой результат будет?


Гм. Так я вроде QByteArray посылаю. А кода программы нет.
Litkevich Yuriy Дата 26.10.2010, 13:03
 
Цитата(ernie @ 26.10.2010, 16:02) *
может проблема в QString?скажем в сокет её напрямую нельзя писать,если правильно помню,попробуй вместо QString скажем int отправить,какой результат будет?
да чё гадать. Код надо.
ernie Дата 26.10.2010, 13:02
  может проблема в QString?скажем в сокет её напрямую нельзя писать,если правильно помню,попробуй вместо QString скажем int отправить,какой результат будет?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 5:10