crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Запуск консольной программы в GUI
Vexar
  опции профиля:
сообщение 30.6.2009, 8:32
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 28.11.2008
Пользователь №: 438

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




Репутация:   0  


Подскажите кто знает.
Есть консольная программа как ее запустить в GUI чтобы вывод был не в консоли а в GUI.
Есть класс MainWindow :

MainWindow::MainWindow()
{
?????????????????
setCentralWidget(????????????);
createActions();
createMenus();

setWindowIcon(QIcon(":/images/icon.ico"));

}


Может есть какой то класс который может это делать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 30.6.2009, 9:02
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(Vexar @ 30.6.2009, 9:32) *
Может есть какой то класс который может это делать?

QProcess
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
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  


Цитата(Vexar @ 1.7.2009, 13:36) *
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.
Сделал так:
MainWindow::MainWindow()
{
    QProcess *process = new QProcess;
    process->start("./programma");
}


Я так понял чтобы вывод был в GUI нужно еще скомпоновать:
MainWindow::MainWindow()
{
    QWidget *widget = new QWidget;
    setCentralWidget(widget);

    QProcess *process = new QProcess;
    process->start("./programma");

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(process);
    widget->setLayout(layout);
}

Но при компиляции вываливается ошибка: нет подходящей функции для вызова ‘QVBoxLayout::addWidget(QProcess*&)’
Подскажите куда дальше копать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.7.2009, 7:07
Сообщение #6


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

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

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




Репутация:   94  


Цитата(Vexar @ 2.7.2009, 10:09) *
layout->addWidget(process);
А что QProcess - это виджет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 2.7.2009, 8:29
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(Litkevich Yuriy @ 2.7.2009, 8:07) *
А что QProcess - это виджет?


Не совсем так, это надо документацию читать ;) (Шучу)

Цитата(Litkevich Yuriy @ 1.7.2009, 10:54) *
но она не выводится в GUI.


Надо самому читать через функцию QByteArray QProcess::readAllStandardOutput ()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 2.7.2009, 18:51
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

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




Репутация:   11  


Цитата(Vexar @ 2.7.2009, 7:09) *
Все отлично программа запускается, но она не выводится в 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 не постепенно по мере выполнения действий а только после полно завершения.

Подскажите как с этим бороться ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.12.2024, 1:21