Запуск консольной программы в GUI |
Здравствуйте, гость ( Вход | Регистрация )
Запуск консольной программы в GUI |
Vexar |
30.6.2009, 8:32
Сообщение
#1
|
Студент Группа: Участник Сообщений: 24 Регистрация: 28.11.2008 Пользователь №: 438 Спасибо сказали: 0 раз(а) Репутация: 0 |
Подскажите кто знает.
Есть консольная программа как ее запустить в GUI чтобы вывод был не в консоли а в GUI. Есть класс MainWindow :
Может есть какой то класс который может это делать? |
|
|
SABROG |
30.6.2009, 9:02
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
|
|
|
Vexar |
1.7.2009, 9:36
Сообщение
#3
|
Студент Группа: Участник Сообщений: 24 Регистрация: 28.11.2008 Пользователь №: 438 Спасибо сказали: 0 раз(а) Репутация: 0 |
Наткнулся в документации вот на такой пример:
MainWindow::MainWindow() { QProcess process; process.start("./programma"); } Компилируется без ошибок, но при запуске GUI консольная программа не запускается пишет QProcess: Destroyed while process is still running. В какую сторону копать? |
|
|
Litkevich Yuriy |
1.7.2009, 9:54
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
QProcess: Destroyed while process is still running. По-русски:QProcess: Уничтожен во время запуска процесса. Тут программа запукается, и в это же время заканчивает свою работу конструктор, удаляя объект process (выход за область видимости) Вариантов два: 1) Создать QProcess динамически (с помощью оператора new) 2) Дождатся запуска внешнего приложения (см. документацию по QProcess, например, waitForStarted() ) |
|
|
Vexar |
2.7.2009, 6:09
Сообщение
#5
|
Студент Группа: Участник Сообщений: 24 Регистрация: 28.11.2008 Пользователь №: 438 Спасибо сказали: 0 раз(а) Репутация: 0 |
Все отлично программа запускается, но она не выводится в GUI.
Сделал так:
Я так понял чтобы вывод был в GUI нужно еще скомпоновать:
Но при компиляции вываливается ошибка: нет подходящей функции для вызова ‘QVBoxLayout::addWidget(QProcess*&)’ Подскажите куда дальше копать? |
|
|
Litkevich Yuriy |
2.7.2009, 7:07
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
SABROG |
2.7.2009, 8:29
Сообщение
#7
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
|
|
|
Sokoloff |
2.7.2009, 18:51
Сообщение
#8
|
Участник Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: 11 |
Все отлично программа запускается, но она не выводится в GUI. QProcess - это невизуальный класс. Для отображения надо перехватить вывод, когда на STDOUT или STDERR появляются данные QProcess генерит сигналы readyReadStandardOutput или readyReadStandardError. Напиши обработчики этих сигналов в которых читай поступившие данные(см раздел "Communicating via Channels" на http://www.doc.crossplatform.ru/qt/4.5.0/qprocess.html), и выводи эти данные в какой-либо визуальный виджет. |
|
|
Litkevich Yuriy |
2.7.2009, 19:07
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
По QProcess нужно смотреть наше ЧаВо (FAQ). Тема с перехватом вывода поднималась и есть примеры.
|
|
|
Vexar |
9.7.2009, 6:19
Сообщение
#10
|
Студент Группа: Участник Сообщений: 24 Регистрация: 28.11.2008 Пользователь №: 438 Спасибо сказали: 0 раз(а) Репутация: 0 |
Всем привет.
В общем получилось у меня запустить консольное приложение через QProcess использовал пример тут Но есть два недостатка, очень весомых: 1. В программе у меня реализована некая загрузка в консольном приложение загрузка идет в одной строке а через QProcess вот так: Загрузка [ ] 0% [ [* ] 2% [ [** ] 4% [ [*** ] 6% [ [**** ] 8% [ [***** ] 10% [ [****** ] 12% То есть загрузка идет не в одной строке а по чему то разбивается по строкам 2. И еще консольная программа выводится в GUI не постепенно по мере выполнения действий а только после полно завершения. Подскажите как с этим бороться ? |
|
|
Текстовая версия | Сейчас: 27.12.2024, 22:01 |