Qt (kehitysympäristö)

**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 Qt Quick-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ä.

Huomattavia Qt:n avulla kehitettyjä ohjelmistoja ovat muun muassa KDE-ympäristö ja siihen liittyvät sovellusohjelmat. Muita ohjelmistoja 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).

Qt Bridges on uudempi tapa, jolla Qt-käyttöliittymiä voi tehdä ohjelmointikielestä riippumattomalla tavalla. Qt Widgets on C++-rajapinnalla käytettävä tapa, jonka rinnalle on tullut Qt Quick (QML-kielellä). Qt tarjoaa myös Qt Quickin, joka sisältää deklaratiivisen skriptikielen nimeltä QML, jonka avulla logiikka voidaan tuottaa JavaScriptin avulla.

## Historia
Qt:n kehityksen aloittivat Trolltechin Haavard Nord ja Eirik Chambe-Eng, jotka molemmat valmistuivat Trondheimin yliopistosta. 1990-luvun alussa he kehittivät ultraäänikuville tietokantaa, jonka piti toimia Unixilla, Macintoshilla ja Windowsissa. Tästä tarpeesta johtuen he aloittivat alustariippumattoman käyttöliittymäkehyksen kehityksen vuonna 1991. Vuonna 1993 heillä oli ydin ja he pystyivät tekemään omia widgetejä. Vuoden 1994 aikana he kehittivät siitä tuotetta ilman varsinaista rahoitusta. Nimeen Qt toimi insipiraationa Xt (*X Toolkit*) ja maaliskuussa 1994 perustetun yrityksen nimi oli aluksi Quasar Technologies, sitten Troll Tech ja myöhemmin Trolltech. 

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 suljetun lisenssin ohjelmissa.

Nokia osti Trolltechin 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. Sovelluksen käyttämä koordinaattijärjestelmä on riippumaton fyysisestä laitteesta ja vasta varsinainen pikseleihin piirtäminen tehdään skaalauskertoimen kanssa.

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* (). 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* ().

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

## Aiheesta muualla

* Qt 
* Qt Commercial 
* Qt:n dokumentaatio 
* Digitoday: Nokia hakee vauhtia ohjelmistoihin Linux-yhtiöstä