**Qt** (lausutaan virallisesti kuten englannin kielen sana "cute") on alustariippumaton ohjelmistojen ja graafisten käyttöliittymien käyttöliittymäkirjasto ja ohjelmointiympäristö. Qt sisältää muiden muassa C++ -luokkakirjaston, omaa QML-kieltä käyttävän QtQuick-kirjaston ja alustariippumattoman ohjelmointiympäristön. Qt-ympäristöä käytetään myös tekstipohjaisten sekä palvelinohjelmistojen kehittämiseen.

Qt-ympäristö on vapaa ja avoimen lähdekoodin ohjelmisto ja se on saatavilla GPL- ja LGPL-lisensseillä sekä kaupallisella lisenssillä.

Qt:n tuotemerkin ja tekijänoikeudet omistaa Qt Group. Qt-ympäristöä kehittää Qt Groupin lisäksi Qt Project, joka on avoin joukko yksilöitä ja yrityksiä.

Huomattava Qt:n avulla kehitetty ohjelmisto on käyttöjärjestelmän graafinen käyttöliittymä KDE ja siihen liittyvät muut ohjelmistot. Muita ohejelmia ovat muiden muassa Google Earth, Skype, VirtualBox ja VLC media player.

Qt-kirjastossa on sisäänrakennettu tuki C++-ohjelmointikielelle, mutta Qt:iä voidaan käyttää myös muilla kielillä kuten esimerkiksi C# (Qyoto -kirjaston avulla), Java (Qt Jambi), Python (PyQt, PySide, PythonQt), Ruby (QtRuby) ja PHP (PHP-Qt).

Historia
--------

Qt:n ensimmäinen julkinen versio 0.90 julkaistiin 20. toukokuuta 1995. Alusta alkaen Qt on julkaistu sekä avoimella että kaupallisella lisenssillä.

Qt valittiin julkaisunsa aikaan 1996, tuolloin vain Linux-käyttöjärjestelmälle tarkoitetun KDE-työpöytäympäristön kehitysympäristöksi. Qt oli tuolloin saatavilla vapaasti vain "ei-kaupalliseen käyttöön", mikä sai GNU-projektin aloittamaan KDE:n kanssa kilpailevan GNOME-projektin. Qt julkaistiin myöhemmin vapaan lähdekoodin kriteerit täyttävällä GPL-lisenssilla ja maaliskuussa 2009 LGPL:llä, joten sitä voi käyttää vapaasti myös kaupallisissa ohjelmissa.

Qt:n alkuperäinen kehittäjä oli norjalainen Trolltech, jonka Nokia osti vuonna 2008. Maaliskuussa 2011 Ohjelmistoyhtiö Digia osti Nokialta Qt:n lisensointi- ja palveluliiketoiminnan. Nokia jatkoi Qt-teknologian kehittämistä, mutta Digia vastasi teknologian kaupallisesta lisensoinnista ja palveluliiketoiminnasta. Elokuussa 2012 julkistettiin, että Digia ostaa koko Qt-kehitysympäristön Nokialta. Kaupan myötä Digia vastasi kaikista Qt-teknologiaan liittyvistä toiminnoista, joista aiemmin on huolehtinut Nokia. Näitä ovat muun muassa tuotekehitys, sekä kaupallisen ja avoimen lähdekoodin lisensointi- ja palveluliiketoiminta, jonka Digia osti jo aikaisemmin maaliskuussa 2011. Kaupan merkittävimpänä tavoitteena on parantaa Digian asemaa Qt-ekosysteemissä ja laajentaa Qt-teknologian saatavuutta yhä useammalle alustalle.  Digia eriytti ensin Qt-liiketoiminnan kokonaan omistamaansa Qt Company tytäryhtiöön. Lopulta kaupankäynti Qt Groupin osakkeella alkoi Helsingin pörssin päälistalla 2. toukokuuta 2016.

Versiohistoria
--------------

### Qt 6

Vuonna 2020 julkaistu Qt 6 vaatii C++17-yhteensopivan kääntäjän ja on siirtynyt CMake-käännösympäristöön. qmake-käännös on vielä tuettu Qt:ta käyttäville sovelluksille. Qt 6:ssa on tukea korkean DPI:n näytöille.

Qt 6.6 lisäsi Wayland-ympäristössä mahdollisuuden säilyttää ohjelmat käynnissä istunnon käynnistyessä uudelleen. Aiemmin X11-ympäristössä palvelinohjelman kaatuminen aiheutti kesken olevan työn kadottamisen. Wayland-ympäristössä muistivaraukset tapahtuvat ohjelmissa, jolloin ne voivat jatkaa kadottamatta tietoja.

Tekniikka
---------

Qt-kirjaston oliot välittävät tietoa toisilleen *signaaleilla* ja *lovilla* (engl. *signals and slots*). Ratkaisu on ollut käytössä toteutuksen ensijulkaisusta lähtien vuonna 1994. Menetelmän tavoite on korjata kaksi *callback*-funktioiden heikkoutta: parantamalla tyyppiturvallisuutta ja vähentää riippuuvuutta tiedosta mitä callback-funktiota käsittelijän on kutsuttava. Tekniikka toteuttaa havainnoitsija-suunnittelumallin. Vastaava toteutus on myös muun muassa Boost-kirjastossa.

Qt:ssa luokka voi toteuttaa yhden tai useampia signaaleja ja yhden tai useampia lovia. Signaalit voidaan kytkeä mihin tahansa haluttuun määrään lovia `connect()`-funktiolla. Lovi on kuin mikä tahansa luokan jäsenmetodi ja sitä voidaan kutsua suoraan, mutta se on määriteltävä loveksi avainsanalla.
Signaalilla ei ole omaa toteutusta. Signaalin lähettämistä kutsutaan *emittoimiseksi* (engl. *emit*).

Alustat
-------

Qt on julkaistu seuraaville alustoille:

* **Qt for Linux/X11** – X Window System (Unix / Linux)
* **Qt for Symbian** – Symbian
* **Qt for Maemo** – Maemo
* **Qt for Meego** – Meego
* **Qt for Mac OS X** – Apple Mac OS X
* **Qt for Embedded Linux** – sulautetut Linux-pohjaiset käyttöjärjestelmät (kämmentietokoneet, älypuhelimet jne.)
* **Qt for Windows** – Microsoft Windows
* **Qt for Windows CE** – Microsoft Windows CE

Wayland-järjestelmää tuetaan vaihtoehtona X Window Systemille.

QNX on tuettu alusta.

VxWorks-tuki on kaupallisessa versiossa.

Lisäksi muun muassa Android-, Integrity-, webOS- ja Yocto-käyttöjärjestelmät ovat tuettuja Qt 6:ssa.

Qt Company on kertonut vuonna 2019 mikrokontrollereille suunnatusta Qt-versiosta.

Moduulit
--------

Qt-luokkakirjasto sisältää seuraavat moduulit:

* Qt Core Module – Qt:n perusluokat, IO, tapahtumien käsittely, säikeet, observer-suunnittelumallin toteutus, jne.
* GUI Module – graafiseen käyttöliittymään liittyvät luokat (*Widgets*)
* OpenGL Module – OpenGL-grafiikkaluokat
* Qt Script Module – tuki komentosarjakielille
* Networking Module – tietoverkkoihin liittyvät ohjelmointiluokat (TCP, HTTP, FTP, DNS jne.)
* Database Module – tietokantaluokat (SQL, ODBC, DB2 jne.)
* Qt WebKit Integration – tuki WWW-sivujen näyttämiseen WebKit-selainmoottorilla
* Phonon Multimedia Framework – ääni- ja kuvatiedostojen mediasoitin
* XML Module – XML-kirjasto (SAX ja DOM)
* Unit Testing Framework – yksikkötestausjärjestelmä

Lisäksi Qt-ympäristö sisältää erilaisia ohjelmointiin sekä kansainvälistämiseen ja lokalisointiin tarkoitettuja työkaluja.

Katso myös
----------

* GTK
* Motif

Lähteet
-------

1. ↑  (en) Qt 6.7 Released!, 2. huhtikuuta 2024 (viitattu 2. huhtikuuta 2024). Tieto on haettu Wikidatasta.
2. ↑  Happy 20th Anniversary Qt! *blog.qt.io*.
3. ↑  20 Years of Qt Code - On 20th May 1995, Qt had its 1st public release ever. *qt.io*.
4. ↑  Digia ostaa koko Qt-kehitysympäristön Nokialta  9.8.2012. ePressi.com. Viitattu 9.8.2012.
5. ↑  Digia ostaa koko Qt-kehitysympäristön Nokialta  9.8.2012. Digia.  Arkistoitu 23.10.2012. Viitattu 9.8.2012.
6. 1 2  Lars Knoll: Qt 6.0 Released *qt.io*.  8.12.2020. Viitattu 8.12.2020. (englanniksi)
7. ↑  Porting to Qt 6 *doc.qt.io*. Viitattu 4.2.2024. (englanniksi)
8. ↑  David Edmundson: QtWayland 6.6 Brings Robustness Through Compositor Handoffs *blog.davidedmundson.co.uk*. Viitattu 7.12.2023. (englanniksi)
9. 1 2  Signals & Slots *doc.qt.io*. Viitattu 24.9.2019. (englanniksi)
10. 1 2  Scott Collins: A Deeper Look at Signals and Slots (PDF) *elpauer.org*.  19.12.2005. Viitattu 24.9.2019. (englanniksi)
11. 1 2 3 4 5  Sarah Thompson: sigslot - C++ Signal/Slot Library *sigslot.sourceforge.net*. Viitattu 24.9.2019. (englanniksi)
12. ↑  Wayland and Qt *doc.qt.io*. Viitattu 14.12.2022. (englanniksi)
13. ↑  Katherine Barrios: Qt Commercial Formally Supports QNX *qt.io*.  29.11.2011. Viitattu 21.3.2024. (englanniksi)
14. ↑  Tuukka Turunen: Qt Commercial for VxWorks *qt.io*.  28.6.2012. Viitattu 21.3.2024. (englanniksi)
15. ↑  Supported Platforms *doc.qt.io*. Viitattu 21.3.2024. (englanniksi)
16. ↑  Michael Larabel: The Qt Company Is Now Working On Qt For Microcontrollers  22.8.2019. Phoronix. Viitattu 23.8.2019. (englanniksi)

Aiheesta muualla
----------------

CommonsCommons
Wikimedia Commonsissa on kuvia tai muita tiedostoja aiheesta **Qt (kehitysympäristö)**.
* Qt (Arkistoitu – Internet Archive)
* Qt Commercial (Arkistoitu – Internet Archive)
* Qt:n dokumentaatio (Arkistoitu – Internet Archive)
* Digitoday: Nokia hakee vauhtia ohjelmistoihin Linux-yhtiöstä