Käyttöliittymiä voi tehdä käytännössä kahdella tavalla. Qt Widgets tyylillä suoraan C++:sta, jossa käyttöliittymän erilaiset visuaaliset elementit ovat C++ -olioita joita luot, pidät tallessa jne. ja joiden ominaisuuksia muokkaat suoraan. Alkuperäiset Qt desktop applikaatiot tehtiin näin. Qt:n koodieditorissa(jota ei siis pidä sekoittaa Qt softakirjastoon), Qt Creatorissa, on myös mahdollisuus tehdä tällainen Qt Widgets käyttöliittymä graafisesti vetelemällä palikoita hiirellä laatikkoon, josta sitten generoituu nuo C++ oliot. Vastaavasti tuon graafisesti tehdyn käyttöliittymän voi generoida Pythonille, josta generoituu Pythoniin nuo oliot joihin sitten laitetaan dataa samaa tapaan kuin C++:ssa ja muokataan olioiden kokoa, luodaan uusia jne.
Toisella tapaa vastaavasti sitten käyttämällä tai QML tyylillä, jossa käyttöliittymän visuaalisia elementtejä luodaan ja käsitellään QML:llä joka on kai käytännössä sama kuin JavaScriptiä kirjottaisi. Vähän toteutuksesta riippuen sitten oletetusti käyttäjän syöttämää mahdollista dataa sitten pyöritellään tuossa JavaScript(QML) muodossa kirjoitetussa koodissa tai sitten tuota QML koodia käytetään vain datan vastaanottamiseen, ja prosessointi koodi kirjoitetaan C++:ssa. Jos datalle halutaan tehdä jotain erityisen haastava laskentaa, yleensä tuo QML ottaa vaan datan ja se tallennetaan C++ taulukoihin, listoihin tms. säiliöihin. Esimerkiksi C++ listalle matemaattiset operaatiot ovat huomattavasti tehokkaampia kuin JavaScript listalle. Sama listan läpikäynnissä jne.
Kilpailevia teknologioita on sitten esimerkiksi erilaiset HTML -pohjaiset käyttöliittymä frameworkit, jotka toimivat esimerkiksi siten, että käyttöliittymä kirjoitetaan webbisivun tyyppisesti ja C++/Pyton/Java koodi sitten käynnistää laitteeseen ikäänkuin webbiserverin joka palvelee tätä “nettisivua” samalta laitteelta. Yleensä siis selaimessa pyörivää käyttöliittymää palveleva webbiserveri siis tietysti pyörii jossain muualla päin maailmaa kuin käyttäjän omassa laitteessa. Käyttöliittymän tai “nettisivun” koodi kirjoitetaan HTML/JavaScript/Css combolla. “Webbiselaimessa” pyörivä käyttöliittymäkoodi ei pääse suoraan käsiksi laitteen fyysiseen rautaan tai käyttöjärjestelmän tarjoamiin palveluihin vaan pyynnöt välitetään tuolle samassa laitteessa pyörivälle “Webbiserverille” joka hoitaa homman.
Sitten on tämä React Native, jossa käyttöliittymäkoodi on JavaScriptiä ja se ajetaan selaimen JavaScript -moottoria muistuttavassa JavaScript Coressa.
Loppujenlopuksi React Native on kohtuullisen lähellä tuota QML -ohjelmointia. Molemmissa käytännön ideana lienee, että Web -kehitystä tehnyt JavaScriptiä hyvin osaava koodari pystyisi helposti tekemään käyttöliittymän ohjelmalle, ja se toimisi erilaisilla alustoilla. Erona on miten esimerkiksi käyttöjärjestelmän tarjoamia palveluja, kuten tiedostojen kirjoittamista, oheislaitteita, prosesseja jne. käytetään. React Nativessa tuo tehdään esim. Androidille Javalla käyttäen tuota Android käyttöjärjestelmän Java API:a kun taas Qt käyttää käsittääkseni lähtökohtaisesti C++ rajapintoja, mutta ilmeisesti myös tuon Java rajapinnan käyttäminen onnistuu jotenkin.
Takamatkaa Qt:lla on React Nativeen verrattuna se, että React Native vaikuttaa hyvin samalta kuin React.js, eli React.js:llä nettisivun käyttöliittymän tehnyt koodari osaa tehdä myös React Nativella android ohjelman käyttöliittymän. Ja React.js on erittäin käytetty webbidevauksessa, joten sitä osaa moni devaaja. Toki käytännössä pelkkä käyttöliittymä ei riitä, vaan dataa pitää käsitellä jne.