Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Tereks от Декабрь 17, 2009, 12:11



Название: Как собрать GUI и Console app?
Отправлено: Tereks от Декабрь 17, 2009, 12:11
Вопрос такой. Написал я приложение, затем понадобилось сделать его в 2 интерфейсах - графическом и консольном. Добавил в ПРО параметр console, ну и инклюд. Однако теперь собранный релиз при запуске выводит оба окна: саму форму и консоль, а надо только форму. Подскажите как сделать


Название: Re: Как собрать GUI и Console app?
Отправлено: Dendy от Декабрь 17, 2009, 12:41
http://msdn.microsoft.com/en-us/library/ms682073%28VS.85%29.aspx

Покопайте в сторону: FreeConsole()


Название: Re: Как собрать GUI и Console app?
Отправлено: Tereks от Декабрь 17, 2009, 13:19
WINAPI хотелось бы трогать в последнюю очередь, так как кроссплатформенность с этим исчезает.


Название: Re: Как собрать GUI и Console app?
Отправлено: SABROG от Декабрь 17, 2009, 15:24
Тебя никто не заставляет выводить интерфейс. Сделай консольную, а интерфейс выводи по ключу к программе или по по команде с консоли.


Название: Re: Как собрать GUI и Console app?
Отправлено: Dendy от Декабрь 17, 2009, 16:01
WINAPI хотелось бы трогать в последнюю очередь, так как кроссплатформенность с этим исчезает.

Это и так платформозависимая задача, кроссплатформенность в этой задаче не может исчезнуть, потому что её нет вообще.


Название: Re: Как собрать GUI и Console app?
Отправлено: Tereks от Декабрь 18, 2009, 10:08
Тебя никто не заставляет выводить интерфейс. Сделай консольную, а интерфейс выводи по ключу к программе или по по команде с консоли.

Мне консоль нужна как полноценная сторона приложения. Как пример - запускаем app.exe /? и получаем справку. Для вывода на консоль приходится в проект добавлять параметр "console", однако опять же при простом запуске приложения консоль выскакивает как из бочки. И FreeConsole не помогает.


Название: Re: Как собрать GUI и Console app?
Отправлено: Dendy от Декабрь 18, 2009, 11:55
У нас в программе есть консольное приложение, которое эту консоль прячет при старте, правда как оно это делает - нужно посмотреть.


Название: Re: Как собрать GUI и Console app?
Отправлено: crackedmind от Декабрь 18, 2009, 13:08
Во-первых, FreeConsole уберет только консоль созданную по AllocConsole.
Код:
    if ( argc > 1 )
    {
        if ( strstr(argv[1], "/h") )
        {
            AllocConsole();
            AttachConsole(ATTACH_PARENT_PROCESS);
            SetConsoleTitle(L"Boom!");
            DWORD out = 0;
            HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
            WriteConsole(hStdOut, L"eee", 3, &out, 0);
            Sleep(5000);
            FreeConsole();
            //
        }
    }

Ну вот как то  так :)

А вот кусок кода с редиректом в stdout чтоб работали printf и прочее...
Найдено в инете. Думаю сами адаптируете как надо

Код:
void CreateConsoleLog(const char *winTitle)
{
AllocConsole();
SetConsoleTitle(winTitle);

int hConHandle;
long lStdHandle;
FILE *fp;

// redirect unbuffered STDOUT to the console
lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen( hConHandle, "w" );
*stdout = *fp;
setvbuf( stdout, NULL, _IONBF, 0 );

// redirect unbuffered STDIN to the console
lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen( hConHandle, "r" );
*stdin = *fp;
setvbuf( stdin, NULL, _IONBF, 0 );

// redirect unbuffered STDERR to the console
lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen( hConHandle, "w" );
*stderr = *fp;
setvbuf( stderr, NULL, _IONBF, 0 );
}