Qt (kehitysympäristö)

Wikipediasta
(Ohjattu sivulta Qt (ohjelmistokehys))
Siirry navigaatioon Siirry hakuun
Qt
Qt Designer -työkalu käyttöliittymien suunnittelua varten
Qt Designer -työkalu käyttöliittymien suunnittelua varten
Kehittäjä Qt Group
Qt Project
Kehityshistoria
Vakaa versio 6.8.1 ()[1]
Tiedot
Ohjelmistotyyppi käyttöliittymäkirjasto, ohjelmointiympäristö
Alusta Android, Linux, iOS, OS X, QNX, Windows
Lisenssi GPL, LGPL, kaupallinen
Aiheesta muualla
www.qt.io
Versiohallinta

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

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: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.[2]

Qt:n ensimmäinen julkinen versio 0.90 julkaistiin 20. toukokuuta 1995.[3][4] 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.

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.[5] [6] 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

[muokkaa | muokkaa wikitekstiä]

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

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.[9]

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

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

Qt on julkaistu seuraaville alustoille:

Wayland-järjestelmää tuetaan vaihtoehtona X Window Systemille.[13]

QNX on tuettu alusta.[14]

VxWorks-tuki on kaupallisessa versiossa.[15]

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

Qt Company on kertonut vuonna 2019 mikrokontrollereille suunnatusta Qt-versiosta.[17]

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.

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

Aiheesta muualla

[muokkaa | muokkaa wikitekstiä]