Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

9. Qt - úvod, kompilace, komponenty

Zdrojové kódy příkladů jsou k dispozici na 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 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 <QApplication>
#include <QLabel>
 
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:

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

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.

courses/b2b99ppc/tutorials/09.txt · Last modified: 2021/04/12 11:21 by viteks