====== 9. Qt - úvod, kompilace, komponenty ======
Zdrojové kódy příkladů jsou k dispozici na [[https://gitlab.fel.cvut.cz/viteks/ppc/-/tree/master/tutorials/tut09|gitlabu]].
===== Kompilace aplikace =====
Tato sekce je zaměřena na programování v operačních systémech MS Windows. V ostatních majoritních OS bude postup velmi podobný (některé programy se budou jmenovat jinak). Předpokládá se použití kompilátoru ''MinGW'' a správné nastavení cest v OS.
Pokud ještě nemáte Qt framework nainstalován, postupujte třeba podle návodu [[courses:b2b99ppc:howtos:qt_install_win|Qt - instalace]].
==== Příklad ====
Mějme následující jednoduchou aplikaci v Qt, pro kterou vytvoříme předpis automatického sestavení. Pro každou Qt aplikaci je vhodné mít extra adresář, v tomto případě ''01-button''.
#include
#include
int main(int argc, char *argv[])
{
QApplication app (argc, argv);
QLabel *pLabel = new QLabel("Hello Qt!");
pLabel->show();
//
return app.exec();
}
==== qmake ====
''qmake'' je program pro práci s Qt projekty, dodávaný jako součást distribuce. Od verze Qt6 je doporučenou jako sestavovací program využít ''cmake'' (viz níže), ''qmake'' je ale nadále součástí distribuce a může prokázat dobré služby.
V adresáři se zdrojovým souborem (případně soubory) spusťte ''qmake'' s volbou ''-project''
$ cd 01-button
$ qmake -project
V adresáři se objeví projektový soubor, pojmenovaný podle názvu aktuálního adresáře, v tomto případě tedy ''01-button.pro''. Klíčové části jeho obsahu jsou
TEMPLATE = app
TARGET = 01-example
INCLUDEPATH += .
# Input
SOURCES += main.cpp
Do projektového souboru je potřeba dodat řádek ''QT += widgets''
Tento soubor je multiplatformní, použijeme ho pro vygenerování platformově závislého ''Makefile''
$ qmake 01-example.pro
Pokud máte v prostředí MS Windows více kompilátorů, je možné, že bude třeba specifikovat, který se má použít: např. volbou ''-spec win32-g++''.
Pokud je v aplikaci použit ladící výstup pomocí ''qDebug()'', přidejte do projektu ''CONFIG += console''.
V adresáři se kromě souboru ''Makefile'' objevily také adresáře ''debug'' a ''release'', do kterých budou směrovány výsledné binární soubory. Debug verze bude obsahovat ladicí symboly a bude tudíž mírně objemnější, release verze ladicí symboly neobsahuje. Defaultně se vytváří release verze, volbu verze lze ovlivnit v projektu např. volbou ''CONFIG+=debug''. (Konfigurační volby lze dodávat i jako parametr ''qmake''.)
Na vytvořený ''Makefile'' zavoláme ''make'' dodaný s kompilátorem
$ mingw32-make
Pokud vše proběhlo bez chyby, v adresáři ''debug'' nebo ''release'' se objevil soubor ''01-button.exe''. Tento soubor ale nepůjde pravděpodobně spustit:
{{ :courses:b2b99ppc:howtos:qt_08_error.png?400 |}}
Ke správnému běhu aplikace v prostředí MS Windows je třeba provést ''deployment'', tj. vytvořit podmnínky ve kterých má aplikace dostupné potřebné knihovny. Podrobnosti lze nalézt na [[https://doc.qt.io/qt-6/windows-deployment.html|stránkách]] Qt.
Pokud je vše správně nastaveno, stačí provést následující příkaz (buď s absolutními cestami, nebo v adresáři s aplikaci.
$ windeployqt debug\01-button.exe
Program dodá do adresáře aplikace potřebné knihovny v ''debug'' verzi. Aplikaci lze pak spustit
{{ :courses:b2b99ppc:howtos:qt_09_running.png?100 |}}
==== cmake ====
''cmake'' je univerzální sestavovací program, který pracuje na základě předpisu v souboru, defaultně pojmenovaném ''CMakeLists.txt''. Šablona ''CMakeLists.txt'' pro překlad Qt aplikace pomocí ''cmake'' by mohla vypadat třeba takto:
cmake_minimum_required(VERSION 3.16.0)
project(01-button VERSION 1.0.0 LANGUAGES CXX)
# set(CMAKE_BUILD_TYPE Debug)
# set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
find_package(Qt6 COMPONENTS Widgets REQUIRED)
add_executable(01-button main.cpp)
target_link_libraries(01-button PRIVATE Qt6::Widgets)
Vzhledem k tomu, že během běhu ''cmake'' produkuje řadu dalších souborů, doporučeným postupem je vytvořit podadresář (např. ''build'') a ''cmake'' spouštět odtud
$ mkdir build
$ cd build
$ cmake .. -G "MinGW Makefiles"
$ mingw32-make
Po kompilaci je třeba opět provést deployment.