====== 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.