Tehtävässä tutkitaan Qt-sovelluksen rakenteita. Tässä siis hyödynnetään Qt Frameworkin ominaisuuksia.
Lue sivun https://peatutor.com/qt/ materiaalista, mikä on luokan QObject tarkoitus, ja mihin tarvitaan makroa Q_OBJECT.
HUOM!: Luo kullekin luokalle erillinen h-tiedosto ja cpp-tiedosto.
Rakenna tämän tehtävän sovellus luomalla sovellus, jonka tyyppinä on Qt-Console hyödyntäen Qt Creatorin ominaisuuksia.
Luo projekti nimeltään h6 ja valitse nyt tyypiksi Application (Qt)->Qt Console Application
QThread::msleep(1000); emit readyToSay();
qDebug()<<"Terve";
qDebug()<<"Start"; connect(this, &ExampleClass::readyToSay, this, &ExampleClass::sayHelloSlot); qDebug()<<"End";
Huom! qDebug toimii myös näin qDebug("Terve");, mutta yllä oleva tapa on uudempi.
Edellä haluttiin käyttää luokassa ExampleClass Qt:n signal/slot mekanismia, joten
emit readyToSay(); "nostetaan" readyToSay, niminen signaaliconnect(this, &ExampleClass::readyToSay, this, &ExampleClass::sayHelloSlot);
readyToSay signaali kytketään slottiin sayHelloSlot
Konsolisovelluksessa qDebug toimii kuten cout. Graafisissa sovelluksissa qDebuggia voidaan käyttää tulostamaan tekstiä Qt-Creatorin Output ikkunaan. Näitä sanomia ei siis näytetä loppukäyttäjille.
Tehtävän tarkoitus on havainnollistaa kuinka signal/slot systeemi toimii. Tässä metodi startToWait edustaa metodia, joka suorittaa tehtävää, jonka valmistumista ei voida ennakoida. Kun se saa työnsä valmiiksi, se emitoi readyToSay signaalin.
Qt-frameworkin signal-slot systeemi korvaa peristeisten callback funktioiden tarpeen.
Callback-funktiot ovat ohjelmoinnissa funktioita, jotka annetaan parametreina toisille funktioille. Ne suoritetaan myöhemmin, yleensä tietyn tapahtuman tai operaation valmistuttua. Callback-funktioiden avulla voidaan toteuttaa asynkronisia toimintoja, kuten tiedon hakemista palvelimelta tai käyttäjän syötteiden käsittelyä.
Makro C++-ohjelmoinnissa on esikäsittelijäohje, joka määritellään käyttämällä #define-lausetta. Makrot korvataan koodissa ennen varsinaista kääntämistä. Niitä käytetään esimerkiksi vakioiden, funktiokoodin tai koodimallien lyhentämiseen.
Q_OBJECT-makro itsessään ei sisällä suoritettavia toimenpiteitä, vaan se toimii osana Qt:n esikäsittelyä. Se ainoastaan kertoo Qt:n työkaluille, että tämä luokka sisältää Qt:n erikoisominaisuuksia ja että sille tulee luoda lisäkoodia.