Obsah Úvod O čem je tato kniha? Pro koho je tato kniha? Jak studovat tuto knihu? Poděkování Zpětná vazba od čtenářů Zdrojové kódy ke knize Errata
13 13 15 16 16 17 17 17
KAPITOLA 1
Trocha teorie na úvod Něco z historie uživatelských rozhraní Uživatelská rozhraní aplikací a jejich vývoj Aplikace s textovým uživatelským rozhraním (TUI) Aplikace s grafickým uživatelským rozhraním (GUI) Některé základní pojmy Základní vývojové komponenty Vývojové nástroje a pomůcky Widgety, okna, dialogy a další aplikační komponenty Možnosti tvorby GUI aplikací Tvorba GUI aplikací na platformě Microsoft Windows Tvorba GUI aplikací na platformě GNU Linux/UNIX Tvorba GUI aplikací na platformě Apple Mac OS Multiplatformní možnosti tvorby GUI aplikací Ostatní možnosti vývoje a další nástroje Proč právě Qt framework a jazyk C++? Vlastnosti Qt frameworku Jazyk C++ a ostatní jazyky
19 20 21 22 25 27 28 30 31 33 33 36 37 37 38 39 39 41
KAPITOLA 2
Instalace, sestavování a licencování Instalace Qt SDK ve Windows Instalace Qt SDK v Linuxu/X11 Instalace Qt SDK v Mac OS X
43 43 46 49
3
K1878-sazba.indd 3
3.10.2013 15:24:23
Obsah
Podpora ostatních platforem v Qt Odinstalace Qt SDK a několik poznámek Sestavování aplikací v Qt (qmake) Přiložené demonstrační aplikace a qtdemo Sestavování aplikací v prostředí Qt Creator Sestavování aplikací pomocí nástroje qmake Licencování Qt frameworku Svobodné licence Qt Komerční licence Qt Srovnávací tabulka licencí
52 52 54 54 57 64 68 68 69 70
KAPITOLA 3
Jednoduché aplikace v Qt Ahoj světe Qt! Třída QCoreApplication Třída QApplication Třída QString Třída QObject Třída QWidget Třída QLabel Propojování objektů mechanismem signálu a slotu Obecné zásady tvorby grafického uživatelského rozhraní aplikace v Qt Jednoduché rozmisťování widgetů v okně aplikace Správci rozvržení Zesilovač – ukázková aplikace Qt Creator – vše, co potřebujete pro vývoj v Qt Zesilovač 2.0 – ukázková aplikace tentokrát v Qt Creatoru Referenční dokumentace a další užitečné informace o Qt Oficiální referenční nápověda ke Qt na webu Referenční nápověda integrovaná v Qt Creatoru Nápověda a dokumentace s Qt Assistant Další informace a dokumentace na webu
71 72 74 75 76 76 77 78 79 82 83 83 84 88 89 95 95 96 97 98
KAPITOLA 4
Tlačítka a další vstupní widgety Tlačítka, jejich typy a skupiny QPushButton (příkazové tlačítko) QCheckBox (zaškrtávací pole) QRadioButton (přepínač)
101 102 102 107 109
4
K1878-sazba.indd 4
3.10.2013 15:24:23
Obsah
QToolButton (nástrojové tlačítko) QCommandLinkButton (povelové tlačítko) QDialogButtonBox (skupina dialogových tlačítek) QButtonGroup (skupina tlačítek) QAbstractButton (abstraktní tlačítko) Výběrová tlačítka a jejich skupiny – praktická ukázka Číselné vstupní widgety QSlider (posuvník) QDial (číselník) QScrollBar (posuvná lišta) QAbstractSlider (abstraktní posuvník) Číselné vstupní widgety – praktická ukázka Textové vstupní widgety QLineEdit (editační pole) QTextEdit (textové pole) QPlainTextEdit (jednoduché textové pole) QSpinBox (textový číselník) QDoubleSpinBox (desetinný číselník) Widgety pro vstup data a času QDateTimeEdit (pole s datem a časem) QDateEdit (pole s datem) QTimeEdit (pole s časem) Rozevírací výběrová pole a seznamy QComboBox (rozevírací výběrové pole/seznam) QFontComboBox (pole pro výběr písma) MiniEditor – praktická ukázka
111 112 113 114 115 116 119 120 122 123 125 126 130 130 132 133 133 134 135 135 136 136 137 137 138 139
KAPITOLA 5
Prezentační a organizační widgety Prezentační widgety QLabel (popisek) QLCDNumber (digitální displej) QTextBrowser (textový prohlížeč) Line (horizontální/vertikální oddělovací čára) QProgressBar (ukazatel průběhu) QCalendarWidget (kalendář) QGraphicsView (pohled na scénu) QDeclarativeView (deklarativní pohled) QWebView (webový pohled)
145 145 146 146 147 149 149 150 154 155 156
5
K1878-sazba.indd 5
3.10.2013 15:24:23
Obsah
Ostatní prezentační widgety QListWidget (seznam) QTableWidget (tabulka) QTreeWidget (strom) Organizační (kontejnerové) widgety QGroupBox (skupinová oblast) QScrollArea (posuvná oblast) QToolBox (nástrojový box/panel) QTabWidget (widget záložky/karty) QStackedWidget (skládaný widget) Ostatní organizační widgety Pokročilejší rozmisťování widgetů (v oknech aplikace) QWidget a jeho geometrické vlastnosti Třída QSizePolicy a její význam Správci rozvržení komplexněji Oddělovače a prázdná místa
158 159 162 166 168 168 169 170 170 172 172 173 174 176 178 179
KAPITOLA 6
Dialogy a vlastní složené widgety Standardní vestavěné dialogy QMessageBox (oznamovací/dotazovací dialog) QErrorMessage (dialog s chybovou zprávou) QProgressDialog (dialog s ukazatelem průběhu) QInputDialog (víceúčelový vstupní dialog) QFileDialog (dialog pro výběr souboru či adresáře) QFontDialog (dialog volby písma) QColorDialog (dialog volby barvy) QPrintDialog (dialog nastavení tisku) QPageSetupDialog (dialog nastavení stránky) QPrintPreviewDialog (dialog náhledu před tiskem) Třída QDialog a vlastní dialogy Třída QDialog Skupina dialogových tlačítek QDialogButtonBox Tvorba vlastního dynamického dialogu Složené widgety a jejich tvorba Povýšení widgetu (promoting)
185 185 186 191 192 193 195 198 199 201 202 202 203 204 205 207 212 219
6
K1878-sazba.indd 6
3.10.2013 15:24:23
Obsah
KAPITOLA 7
Hlavní okno aplikace a jeho komponenty
223
Hlavní okno aplikace Třída QMainWindow Uživatelské akce (QAction) Hlavní nabídka okna (QMenuBar) Nástrojové panely a jejich tvorba (QToolBar) Přemístitelné/dokovatelné widgety (QDockWidget) Stavový řádek (QStatusBar) Jednoduchý textový editor Přidání souborů se zdroji (QRC) Tvorba UI aplikace s hlavním oknem v Qt Creatoru Implementace aplikace s hlavním oknem v Qt Creatoru Propojení hlavního okna s ostatními prvky aplikace Aplikace s více samostatnými okny Propojení dialogů s hlavním oknem Aplikace typu SDI a MDI Doplňkové prvky klasické aplikace Ikona aplikace v systémové liště Ověření/potvrzení požadavku na ukončení aplikace Možnost ukládání stavu hlavního okna aplikace
224 224 226 229 233 235 238 239 241 243 243 243 244 245 247 248 248 250 252
KAPITOLA 8
Grafika v Qt Kreslicí systém v Qt (rastrové kreslení) Kreslicí zařízení podporovaná třídou QPainter Kreslení s třídou QPainter Pomocné třídy a funkce pro kreslení Souřadnicový systém pro rastrové kreslení a jeho transformace Vykreslování vlastních widgetů Kreslení do rastrů (generování obrázků) Třída QPrinter a tisk v Qt Grafický framework Qt (vektorové kreslení) Princip Graphics View Frameworku – scéna, pohled, entita Dostupné grafické entity Vlastní grafické entity Souřádnicový systém grafického frameworku Ostatní pomocné třídy grafického frameworku Jednoduchý grafický editor
255 256 256 259 264 266 268 273 274 276 277 279 280 282 284 287
7
K1878-sazba.indd 7
3.10.2013 15:24:23
Obsah
Další možnosti práce s grafikou v Qt Kreslení s OpenGL v Qt frameworku Pomocné graficko-matematické třídy Nový grafický modul Qt3D
311 311 312 312
KAPITOLA 9
Implementace vlastních widgetů Implementace vlastního widgetu Integrace vlastního widgetu do aplikace Integrace vlastního widgetu do návrhového prostředí Qt Creatoru Události v Qt a jejich obsluha Časovače a časování v Qt Základní časování pomocí třídy QBasicTimer Komplexnější časování pomocí třídy QTimer Práce se soubory v Qt
313 313 318 320 321 324 325 326 328
KAPITOLA 10
Na co jsme zapomněli Neprobraná témata a moduly Návrhový vzor Model-View-Controller Programové ladění v Qt Externí knihovny a jazykové vazby Přidání externí knihovny do projektu Externí jazykové vazby a QPA Pár slov a tipů na závěr Přehled nabytých znalostí Pohled do budoucnosti Qt frameworku Kam směřovat dál
335 335 337 338 340 341 342 343 343 345 346
KAPITOLA 11
Dodatky Tematický přehled základních tříd Esenciální třídy Qt frameworku Hlavní okno aplikace a jeho komponenty Prezentační a vstupní widgety Vstupní, výběrové a informační dialogy Třídy základních událostí Vykreslovací a grafické třídy systému Arthur – rastrové kreslení Graphics-View framework – vektorové kreslení
347 347 348 348 350 351 351 352 354
8
K1878-sazba.indd 8
3.10.2013 15:24:23
Obsah
Podpora časování a animací Webové komponenty a elementy Práce se soubory a dalšími I/O zařízeními Třídy kontejnerů a obecných úložišť Komponenty Model-View frameworku Ostatní významné skupiny tříd Ostatní užitečné deklarace, třídy a kontejnery Global Qt Declarations (globální Qt deklarace) Qt Namespace (obor názvů Qt) Kontejnery a další užitečné třídy a funkce Qt Creator – přehled, UI a klávesové zkratky Přehled UI vývojového prostředí Qt Creator Klávesové zkratky Qt Creatoru Oficiální zdroje, fóra a tutoriály zaměřené na Qt framework Nejvýznamnější oficiální weby Referenční dokumentace a literatura Webová fóra a mailing listy Výukové zdroje a materiály České výukové seriály a tutoriály Ostatní zdroje a doplňky Seznam použité a doporučené literatury O Qt frameworku O jazyce C++ a návrhových vzorech O počítačové grafice obecně Malý anglicko-český slovník užitých zkratek, pojmů a frází Některé užité anglické zkratky Některé zavedené pojmy, fráze a slovní spojení
Rejstřík
355 356 356 356 357 358 360 360 361 362 363 364 366 368 368 368 369 369 369 369 370 370 370 371 371 371 373
381
9
K1878-sazba.indd 9
3.10.2013 15:24:23