Qt (knižnica)

**Qt** je jedna z dvoch najpopulárnejších multiplatformových knižníc pre vytváranie programov s grafickým užívateľským rozhraním.

Qt toolkit bol vytvorený v roku 1999 spoločnosťou Trolltech, ktorá ho v roku 2008 predala firme Nokia. V marci roku 2011 Nokia ohlásila predaj práv na prevádzku podporných služieb a predaj licencií pre komerčné projekty vytvorené pomocou Qt spoločnosti Digia. Zároveň však Nokia uisťuje, že po transakcii zostane hlavným vývojárom tohto toolkitu.

Od roku 1999 sa Qt toolkit vyvinul na multiplatformový nástroj, v ktorom možno vyvíjať konzolové alebo GUI aplikácie v odlišných programovacích jazykoch pre rôzne platformy. Aplikácie napísané s pomocou toolkitu je možné distribuovať pod licenciou GPL, LGPL, alebo po splnení určitých podmienok aj komerčne.

Qt je knižnica programovacieho jazyka C++, ale existuje aj pre jazyky Python (PyQt, PySide), Ruby (QtRuby), C, perl, Pascal, C #, Java (Jambi) a Haskell. Podporuje lokalizáciu aplikácií a tiež SQL, spracovanie XML, správu vlákien, prístup k súborom, prácu s grafikou a multimédiami. Veľkou výhodou Qt je veľmi prehľadne spracovaná dokumentácia a taktiež vývojové programy Qt Creator alebo Qt Designer. Aplikácie vytvorené pre grafické užívateľské prostredie používajú natívny vzhľad operačného systému, takže vyvinutá aplikácia sa vždy prispôsobí do používaného prostredia.

Qt spoločne s GTK+ nahradila starší Motif. Dôkazom kvality a rozšírenosti toolkitu je použitie napríklad pre projekty Skype, Google Earth, prostredie KDE, webový prehliadač Opera, VirtualBox a iné.

## Platformy
### Podporované platformy
#### Desktopové
* **Windows** - Qt pre Microsoft Windows XP, Vista a 7 (spolu s MinGW alebo MSVC 2008)
* **Linux / X11** - Qt pre X Window System 32bit a 64bit (Linux, HP-UX, Solaris, AIX ...)
* **OS X** - Qt pre Apple Mac OS X 10.6 "Snow Leopard" a Apple Mac OS X 10.5 "Leopard" x86_64 (Cocoa 32 aj 64bit)

#### Mobilné
* **[[Android]]** - tiež známe ako Necessitas
* **[[iOS]]** - iPad, iPhone
* **[[Windows Phone 8]]** a **[[Windows RT]]**
* **[[BlackBerry]] 10**
* **[[Ubuntu Phone|Ubuntu Touch]]**

#### Ostatné
* **Vstavané Linux platformy** - Embedded Linux QWS (ARM) (PDA, Smartphone ...)
* **Vstavané Windows platformy**
* **Real-Timové operačné systémy** - QNX, VxWorks

### Už nepodporované platformy
* **[[Maemo]]** - Maemo 5 (Linux, ARM, X11), plná podpora nie je zaručená
* **[[Symbian]]** - S60 3rd, S60 5th, Symbian ^ 3, Anna a Belle
* **[[Windows CE|Windows CE 5.0]]** - Qt pre Windows CE (ARMv4i, x86, MIPS)

## Nové technológie od Qt verzie 4
28. júna 2005 Trolltech uvoľnil Qt 4 a predstavil päť nových technológií vo frameworku:
* **Tulip** - šablóny a triedy.
* **Interview** - architektúra pre náhľad na menu.
* **Arthur** - framework pre 2D kreslenie.
* **Scribe** - Unicode text vykresľovaný s verejným API na prezentáciu nízkoúrovňových textových vrstiev.
* **MainWindow** - moderné akčne založené hlavné okno, nástrojová lišta, menu a priľahlá architektom.

## Vývoj verzií

## Licencia
* Qt Komerčné licencie pre vývojárov - licencia je zhodná s licenciou používanou pri vývoji klasickej komerčné aplikácie. Táto verzia je pre vývojárov, ktorí nechcú zdieľať zdrojový kód s ostatnými v súlade s licenciou GPL alebo LGPL.
* Qt GNU LGPL v. 2.1 - táto verzia Qt licencia je vhodná pre vývoj aplikácií open source za predpokladu, že vývojár splní podmienky obsiahnuté vo verzii GNU LGPL 2.1.
* Qt GNU GPL v. 3.0 - táto verzia Qt licencia je vhodná pre vývoj Qt aplikácií, ak mienite používať aplikáciu v kombinácii so softvérom s podmienkami GNU General Public License verzia 3.0 alebo kde ste ochotní dodržať podmienkami GNU General Public License verzia 3.0.

## Signály a sloty
Dôležitou vlastnosťou Qt toolkit je prítomnosť signálov a slotov pre komunikáciu medzi objektmi napr. Ak sa vo widgetu (element GUI, ktorý zobrazuje alebo odovzdáva informácie pomocou interakcie s užívateľom) uskutočnila akcia, ktorá zmenila jeho stav , tak o tom môže byť informovaný widget umiestnený v inom okne aplikácie. Signály a sloty tvorí veľmi silný programátorský nástroj.

Miesto signálov a slotov sa skôr pre tento typ komunikácie používal tzv. Callback, čo je ukazovateľ na metódu objekte, ktorú chceme vyvolať po nejakej udalosti iného objektu. Tento prístup mal dve nevýhody. Nebola tu pri volaní typová kontrola a metódy volané pomocou callback sú silne viazané tzn. volané metóda musí poznať ukazovateľ na metódu, z ktorej bola vyvolaná. Pri používaní signálov a slotov sa tieto dve nevýhody nevyskytujú. Pre ich použitie sa definuje spojenie signálu so slotom pomocou metódy *connect*. V prípade potreby sa potom spojené signály len "vyvolávajú".

Sloty a signály môžu byť využité vo všetkých objektoch, ktoré sú priamo alebo nepriamo zdedené z triedy *QObject*. Pri prepájaní signálov a slotov môže byť s jedným slotom spojené niekoľko rôznych signálov a rovnako tak na jeden signál napojených niekoľko slotov. Sloty môžu byť použité pre prijímanie signálov a zároveň môžu byť použité ako štandardné metódy objekte.

## Príklad zdrojového kódu

```cpp-qt
#include <QtGui>

int main(int argc, char *argv[])
{
 QApplication app(argc, argv);
 QWidget window;
 window.resize(320, 240);
 window.show();
 return app.exec();
}
```


## Pozri aj
* wxWidgets
* PyQt
* Grafika a multimédiá v Qt

## Externé odkazy
* Domovská stránka projektu Qt 
* Referenčná dokumentácia (4.6) 
* Referenčná dokumentácia (4.7)
* Seriál: Qt 4 - písanie grafických programov

## Zdroj

Kategória:Programové knižnice
Kategória:X Window System