Russian Qt Forum
Ноябрь 24, 2024, 23:41
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Вывод данных с консольного приложения через QProcess
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Вывод данных с консольного приложения через QProcess (Прочитано 6984 раз)
Lenchik
Гость
Вывод данных с консольного приложения через QProcess
«
:
Декабрь 07, 2007, 16:30 »
У меня такая проблема -
Через QProcess я запускаю консольное приложение (расчётную программу). В сигнал readyReadStandardOutput() я записываю слот с выводом результатов. Консольная программа довольно часто выдаёт новые результаты, и я заметил, что результаты выдуются сразу некоторым пакетом, типа
Current value= 12324
Current value= 457645
Current value= 67865
Но иногда вывод прерывается прямо на середине строки, и из-за этого вот, что, к примеру, возникает:
Curre
nt value=54654
Можно ли это как-нибудь вылечить?
Записан
Dodge
Гость
Re: Вывод данных с консольного приложения через QProcess
«
Ответ #1 :
Декабрь 08, 2007, 23:58 »
Все нормально работает, частенько юзаю.
версия qt какая?
Записан
Lenchik
Гость
Re: Вывод данных с консольного приложения через QProcess
«
Ответ #2 :
Декабрь 09, 2007, 11:40 »
Версия 4.3.1.
А как вы юзаете?
Записан
Tonal
Гость
Re: Вывод данных с консольного приложения через QProcess
«
Ответ #3 :
Декабрь 09, 2007, 12:22 »
Консольная программа скорее всего использует буферизацию вывода.
Соответственно, не всегда в буфер влезает целое количество строк.
Выход довольно прост:
Разбивать прочитанное по символу конца строки.
Если последняя строка не оканчивается на этот символ запоминать - значит в следующем блоке будет её окончание.
Записан
Icoz
Гость
Re: Вывод данных с консольного приложения через QProcess
«
Ответ #4 :
Декабрь 09, 2007, 20:37 »
Попробуй собирать все в одну строку, потом делай split по переходу на новою строку.
Типа такого:
Код:
QString str="";
while (...){
...
str += getStringFromConsole();
...
}
QStringList lines = str.split("\n");
Записан
Alex03
Гость
Re: Вывод данных с консольного приложения через QProcess
«
Ответ #5 :
Декабрь 10, 2007, 08:11 »
В "расчётной проге" можно принудительно буферы сбрасывать.
flush/sync и т.д.
Но гарантии прихода в QProcess всё равно не будет, так что обрабатывайте как непрерывный поток по своим правилам (перевод строки.)
Записан
StogovOleg
Гость
Re: Вывод данных с консольного приложения через QProcess
«
Ответ #6 :
Декабрь 18, 2007, 23:15 »
я так понимаю вывод в консольной программе происходит асинхронно (т.е. не факт, что когда что-то появилось в выводе это означает, что выведено все), по крайней мере в QProcess для Qt-3.3.3 именно так. Поэтому рекомендуют ждать завершения процесса (сигнал void QProcess::finished для Qt-4.3), а потом читать из потока (QByteArray QProcess::readAllStandardOutput для Qt-4.3)
Записан
Вячеслав
Гость
Re: Вывод данных с консольного приложения через QProcess
«
Ответ #7 :
Декабрь 18, 2007, 23:45 »
а хде это такое рекомендуют ?
Что мешает выдирать строки завершающиеся \n , а к остатку писать новые данные и так до упора .... И работает ведь ......
Записан
StogovOleg
Гость
Re: Вывод данных с консольного приложения через QProcess
«
Ответ #8 :
Декабрь 20, 2007, 01:55 »
The readyReadStdout() signal is emitted when there is new data on standard output. This happens asynchronously: you don't know if more data will arrive later.
In the above example you could connect the processExited() signal to the slot UicManager::readFromStdout() instead. If you do so, you will be certain that all the data is available when the slot is called. On the other hand, you must wait until the process has finished before doing any processing.
для Qt-3.3.3
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...