Qt Creator a konzolové aplikace

Z GeoWikiCZ

Qt Creator je vývojové prostředí určené pro tvorbu platformově nezávislých grafických Qt aplikací. S vývojem klasických konzolových aplikací v podstatě nepočítá. Protože jde ale o uživatelsky velmi přívětivé prostředí s intuitivním možností ladění, je možné je použít pro výuku C++, kde jednoduché konzolové aplikace jsou prvním krokem k následnému vývoji aplikací s grafickým uživatelským rozhraním.

Úvodní stránka Qt Creator, která se zobrazí po spuštění je následující

Pro založení nového projektu - konzolové aplikace zvolíme File --> New --> Empty Qt4 Project

a zvolíme jméno projektu a adresář ve které má být umístěn

Po odsouhlasení zadaných parametrů vytvoří Qt Creator prázdný projekt, do kterého musím přidat C++ soubor, který bude obsahovat funkci main naší konzolové aplikace

Pro ladění máme nyní k dispozici vývojové prostředí Qt Creator včetně debugeru

Kompilace konzolové aplikace pod Windows

Pokud používáte Qt Creator pod operačním systémem Windows, je třeba pro správný běh konzolové aplikace doplnit do projektového souboru (.pro) následující řádky:

TEMPLATE = app
win32:CONFIG += console

Pomocí proměnné TEMPLATE specifikujeme, že chceme, aby qmake generoval makefile, který bude sestavovat aplikaci a v proměnné CONFIG pak ještě upřesníme, že se bude jednat o konzolovou aplikaci.

Tento postup je nutný pouze pod Windows a chceme tedy docílit, aby při kompilaci pod jiným operačním systémem byl ignorován. K tomu slouží uvození řádku specifikací platformy (win32:, unix:, etc.)

Odstranění závislosti na mingwm10.dll

Qt Creator se při sestavování výsledného makefilu, řídí nastavením v konfiguračním souboru pro danou platformu a překladač. Pro platformu Windows a standardní překladač MinGW je to soubor "<QtHome>\qt\mkspecs\win32-g++\qmake.conf" (tento soubor nikdy neupravujte přímo, vždy raději využijte předefinování proměnných přímo z konkrétního projektového souboru tak, jak je ukázáno dále...)

CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release 
debug_and_release_target precompile_header
QT += core gui

Jak je vidno, automaticky je přidáván include základních qt modulů, podpora předkompilovaných hlaviček a další. Při psaní jednoduchého konzolového programu, nejsou nutné a můžeme je přepsat (výsledný soubor bude menší).

TEMPLATE = app
win32:CONFIG = console

Co však způsobuje závislost na sdílené knihovně mingwm10m.dll je podpora vláken a obsluha vyjímek, konkrétně import "-mthreads", který je definovaný v souboru qmake.conf:

QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl

Projektový soubor tedy můžeme upravit takto:

TEMPLATE = app
win32:CONFIG += console
win32:QMAKE_LFLAGS_EXCEPTIONS_ON = -Wl -static-libgcc
win32:QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions

Spuštění konzolové aplikace v terminálu z prostředí Qt Creator

Pokud píšete konzolovou aplikaci, která očekává uživatelský vstup, je nutno v záložce "Projects" -> "Run Settings" mít zatrhnutou položku "Run in Terminal", která zajistí spuštění programu v samostatném okně dosovské konzole, která na rozdíl od palety "Application output" v Qt Creatoru umí přijímat standardní vstup std::cin...