Russian Qt Forum
Апреля 19, 2025, 15:36
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Вывод приложения в консоль
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Вывод приложения в консоль (Прочитано 9118 раз)
juvf
Программист
Offline
Сообщений: 570
Вывод приложения в консоль
«
:
Ноября 03, 2020, 10:04 »
Добрый день.
Очень часто прогеры пишут Qt GUI приложение и запускают с консолью. Приложение запускается в 2-х окнах: само приложение как GUI и отдельное окошко с консолью. Это дополнительное окошко пользователю не нужно (если оно нужно, то перереши приложение так, чтобы оно было не нужно). Как в Qt эту консоль можно реализовать виджетом (например QDocWidget)?
Как сделать докВиджет я знаю. Как перенаправить весь хлам из консоли в этот виджет? Как перенаправить/перехватить сообщения от всяких std::cout, qDebug(), printf(), system, curl, и т.п. ?
Записан
tux
Global Moderator
Бывалый
Offline
Сообщений: 405
Re: Вывод приложения в консоль
«
Ответ #1 :
Ноября 03, 2020, 10:30 »
Вы про это?
https://stackoverflow.com/questions/4954140/how-to-redirect-qdebug-qwarning-qcritical-etc-output
Записан
Digital Art
juvf
Программист
Offline
Сообщений: 570
Re: Вывод приложения в консоль
«
Ответ #2 :
Ноября 03, 2020, 12:03 »
Цитата: tux от Ноября 03, 2020, 10:30
Вы про это?
https://stackoverflow.com/questions/4954140/how-to-redirect-qdebug-qwarning-qcritical-etc-output
Не совсем. Это решение для qDebug. Но std::cout это не перенаправит в мой виджет.
А также, в программе можно сделать системный вызов, например system("some_progpam -a -p 192.168.1.2"); И этот системный вызов вернёт в консоль ответ, такой, как если бы из консоли терминала выполнить "some_progpam -a -p 192.168.1.2". Этот вывод я бы тоже хотел перехватить.
Записан
tux
Global Moderator
Бывалый
Offline
Сообщений: 405
Re: Вывод приложения в консоль
«
Ответ #3 :
Ноября 03, 2020, 13:02 »
Сомнительно, что такое можно вообще сделать мультиплатформенно.
Кстати, а конвейер не подойдёт7 Я имею в виду
Код:
prog1 | prog2
Записан
Digital Art
juvf
Программист
Offline
Сообщений: 570
Re: Вывод приложения в консоль
«
Ответ #4 :
Ноября 03, 2020, 13:13 »
Цитата: tux от Ноября 03, 2020, 13:02
Сомнительно, что такое можно вообще сделать мультиплатформенно.
Кстати, а конвейер не подойдёт7 Я имею в виду
Код:
prog1 | prog2
Мне мультиплатформенно не нужно. Только в винде.
Я тоже сомневаюсь, что есть готовое красивое решение.... но тем не менее...
что за "prog1 | prog2"?
Можно вроде как из консоли запустить бинарник(не только Qt-ый, а вообще любой), и весь вывод перенаправить куданить, например в /dev/null, или в файл. По крайне мере такое возможно в Linux.
Может быть так же при запуске перенаправить весь вывод в /home/user/myPipe (или как это в винде? c:/user/appdata/myPipe), а моё приложение создаст этот pipe и будет с него всё выгребать и перенаправлять в виджет?
Или написать утилиту, которая создаст канал (pipe, stream, file, tcpSocked....) и запустит моё приложение. Утилита передаст дескриптор(указатель, адрес) моему приложению через аргументы при запуске, и при запуске перенаправит весь вывод моего приложения в этот канал?
Что-то подобное взлетит?
Записан
tux
Global Moderator
Бывалый
Offline
Сообщений: 405
Re: Вывод приложения в консоль
«
Ответ #5 :
Ноября 03, 2020, 13:17 »
Цитата: juvf от Ноября 03, 2020, 13:13
что за "prog1 | prog2"?
Ну, это передача выходного потока одной программы во входной поток другой. Его ещё "труба" называют.
Я, правда понятия не имею, есть ли подобное в винде.
Кстати, через локальные сокеты тоже вполне пойдёт. Оно вот точно мультиплатформенно.
P.S. Хотя... pipe это как и есть та самая "труба". Но, реализацию, увы, не подскажу.
Записан
Digital Art
qate
Супер
Offline
Сообщений: 1177
Re: Вывод приложения в консоль
«
Ответ #6 :
Ноября 03, 2020, 23:16 »
обязательно в виджет или файла, который будет иметь весь консольный вывод, будет достаточно ?
Записан
juvf
Программист
Offline
Сообщений: 570
Re: Вывод приложения в консоль
«
Ответ #7 :
Ноября 04, 2020, 09:11 »
Цитата: qate от Ноября 03, 2020, 23:16
обязательно в виджет или файла, который будет иметь весь консольный вывод, будет достаточно ?
да
Записан
tux
Global Moderator
Бывалый
Offline
Сообщений: 405
Re: Вывод приложения в консоль
«
Ответ #8 :
Ноября 04, 2020, 09:46 »
Код:
my_prog >> log.out
«
Последнее редактирование: Ноября 04, 2020, 09:48 от tux
»
Записан
Digital Art
juvf
Программист
Offline
Сообщений: 570
Re: Вывод приложения в консоль
«
Ответ #9 :
Ноября 04, 2020, 09:48 »
Цитата: tux от Ноября 04, 2020, 09:46
my_prog >> log.out
[/quoteа в виджет?
Записан
tux
Global Moderator
Бывалый
Offline
Сообщений: 405
Re: Вывод приложения в консоль
«
Ответ #10 :
Ноября 04, 2020, 09:49 »
Цитата: juvf от Ноября 04, 2020, 09:48
Цитата: tux от Ноября 04, 2020, 09:46
my_prog >> log.out
[/quoteа в виджет?
В файл на диске. Чуть выше было согласие на такое.
Записан
Digital Art
juvf
Программист
Offline
Сообщений: 570
Re: Вывод приложения в консоль
«
Ответ #11 :
Ноября 04, 2020, 09:52 »
Цитировать
обязательно в виджет или файла?
согласие было в виджет или файл.
в файл не очень хорошая затея, т.к. размер файла не будет контролироваться.
Записан
tux
Global Moderator
Бывалый
Offline
Сообщений: 405
Re: Вывод приложения в консоль
«
Ответ #12 :
Ноября 04, 2020, 10:00 »
Цитата: juvf от Ноября 04, 2020, 09:52
в файл не очень хорошая затея, т.к. размер файла не будет контролироваться.
Тогда остаётся только "труба". Я с pipe как-то даже делал что-то. Но - давно. А сейчас, банально, нет винды. Совсем.
Записан
Digital Art
qate
Супер
Offline
Сообщений: 1177
Re: Вывод приложения в консоль
«
Ответ #13 :
Ноября 04, 2020, 11:17 »
Цитата: juvf от Ноября 04, 2020, 09:52
в файл не очень хорошая затея, т.к. размер файла не будет контролироваться.
файл можно обнулять по таймеру
чуть позже накидаю как я делаю
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Вывод приложения в консоль
«
Ответ #14 :
Ноября 05, 2020, 00:49 »
1. Запуск программы выполняется через bat файл MyProgram.bat: MyProgram.exe 2>&1 | tee log_file_[currentdatetime].txt
tee.exe - программа из состава cigwin
это обеспечивает вывод в "консольное черное окно" и далее в файл даже несмотря на то, что в pro файле стоит CONFIG -= console и следовательно при линковке: -Wl,-subsystem,windows
для отладки это удобно
currentdatetime - текущее время, или число секунд от эпохи
2. т.к. "консольное черное окно" - пользователю неугодно видеть, то его надо скрыть
делает это простейшая программа hidec.exe
http://forum.oszone.net/showthread.php?t=29630
3. Итоговый запуск программы выполняет MyProgramRunner.exe, который состоит из одной функции:
CreateProcess(NULL, "hidec.exe MyProgram.bat", NULL, NULL, FALSE, CREATE_NEW_PROCESS_GROUP, NULL, NULL, &cif, &pi);
Ничего лучшего для венды я придумать не смог, но для пользователя всё это незаметно - дабл клик по иконке на рабочем столе как обычно.
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...