Russian Qt Forum
Ноябрь 25, 2024, 08:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: GUI / console одновременно  (Прочитано 18843 раз)
fanat9
Гость
« Ответ #15 : Сентябрь 28, 2006, 23:09 »

В документации говорится что для консольного приложения под виндой нужно компилить с особым флагом:
QMAKE_LFLAGS_CONSOLE
This is used on Windows only.
This variable contains link flags when building console programs. The value of this variable is typically handled by qmake or qmake.conf and rarely needs to be modified.

И действительно при добавлении этого флага(и компиляции), при старте программы возникает окно консоли. Как переключаться это вопрос...
Записан
Вудруф
Гость
« Ответ #16 : Сентябрь 29, 2006, 07:08 »

Присоединяюсь к xvadim: лучше сделать две версии программы. Или одну (консольную) со всей функциональностью, и одну как GUI-оболочку над первой программой.
Записан
Tonal
Гость
« Ответ #17 : Сентябрь 29, 2006, 07:43 »

Смотри Console Reference в MSDN-е.
Семейство функций AllocConsole, AttachConsole, FreeConsole.

Насчёт перепривязки стандартных файлов примерно так:
Код:
  ::AllocConsole();
  freopen("CONOUT$", "wt", stdout);
  freopen("CONIN$", "rt", stdin);
Записан
bigirbis
Гость
« Ответ #18 : Сентябрь 29, 2006, 09:44 »

А ларчик просто открывался (я проверил на практике). Читай ссылку (хоть она и старая, но работает):
http://lists.trolltech.com/qt-interest/2000-10/msg00520.html
Записан
Zmey
Гость
« Ответ #19 : Сентябрь 29, 2006, 11:01 »

Две версии программы - слишком уж половой изврат... Но тоже вариант.
bigirbis,
Эту ссылку я уже читал и комментировал:
Цитировать
Если я запускаю приложение из консоли, а потом создаю консоль сам, то весь текст выводится в созданную мной консоль, а надо в консоль, из которой я запустил приложение.


Видимо, полностью переключиться между GUI/console во время старта невозможно. Спасибо, несколько workaround'ов подсказали, будем решать.
Записан
bigirbis
Гость
« Ответ #20 : Сентябрь 29, 2006, 11:14 »

В этом случае не создается дополнительной консоли. Приложение было гуевым. Я запустил его в фаре и стандарные вывод был на консоли фара.

добавлено спустя 6 минут:

 С консольным приложением тоже самое, просто его нужно запускать не из IDE а из консоли...
Записан
xvadim
Гость
« Ответ #21 : Сентябрь 29, 2006, 19:05 »

Цитата: "Zmey"
Две версии программы - слишком уж половой изврат... Но тоже вариант.

Почему половой? Самый нормальный. При твоем подходе необходимы:
[list=]код для консольной ча
Записан
bigirbis
Гость
« Ответ #22 : Октябрь 01, 2006, 12:04 »

Если выставить указанный в статье флаг:
http://lists.trolltech.com/qt-interest/2000-10/msg00520.html
то не понадобится разбивать данную задачу на два приложения, ведь именно этого и хочет Zmey.
Зачем городить?
Записан
Zmey
Гость
« Ответ #23 : Октябрь 02, 2006, 11:26 »

bigirbis, какой флаг? Что то не понимаю, что ты имеешь в виду.
Еще покажи, пожалуйста, код, который у тебя работает.
Записан
bigirbis
Гость
« Ответ #24 : Октябрь 02, 2006, 11:41 »

Код:
int main(int argc, char *argv[])
{
QCoreApplication a( argc, argv );
std::cout << "console application" << std::endl;
return a.exec();
}

Флаг: Linker/System/SubSystem=Console(/SUBSYSTEM:CONSOLE)
Записан
Zmey
Гость
« Ответ #25 : Октябрь 02, 2006, 11:56 »

С этим кодом может и не будет проблем. Но, библиотека Qt иногда выводит всякие сообщения в консоль. Например у меня: "QMainWindow::restoreState: Cannot restore a QToolBar with an empty 'objectName'". Поэтому с этим флагом я при запуске получаю 2 окна: мое GUI окно и консоль.
Записан
bigirbis
Гость
« Ответ #26 : Октябрь 02, 2006, 12:11 »

Попробуй поиграться qInstallMsgHandler
Записан
Zmey
Гость
« Ответ #27 : Октябрь 02, 2006, 14:41 »

bigirbis, невнимательно посмотрел на твой код. Конечно с ним нет проблем. Ведь у тебя не GUI программа.
А ты выполни эту программу с флагом и из проводника:
Код:
int main(int argc, char **argv) 
{
QApplication app(argc, argv);
MainWindow window;
window.show();

return app.exec();
}

У меня, если Qt и не выводит месаги - левое окно консоли есть и оно пустое.
Записан
bigirbis
Гость
« Ответ #28 : Октябрь 02, 2006, 14:48 »

Код:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TestTextEdit w;
w.show();
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));

std::cout << "console application" << std::endl;

return a.exec();
}

Вот такой код (с тем же флагом линкера) при выполнении из проводника выдает гуевый элемент и консольку на которой тут же отображается "console application".

Не думаю, что будет очень тяжело совместить 2 этих кода.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.119 секунд. Запросов: 21.