Következő Előző Tartalom

## 3. A Qt tananyag lefordítása

## 3.1 Első lépés: Helló világ!

Az előző fejezet útmutatása alapján, létrehozott egy projektet, amit `MyWidget` hívnak; most, amikor a tananyag első oldalát nézi a Qt leírásában, látni fogja, hogy az első alkalmazás csak egy `main()` funkciót használ. Így elég megváltoztatnunk a megadott `main`()/ funkciót a létrehozott projektben, hogy elindulhassunk a példafeladat első részével. A `main()` funkció eléréséhez válassza ki azt az osztályböngésző (classviewer) "Globals" elérési útjáról, ahol a "Funkciók" pont található, ami az összes non-class fukciót kilistázza. Ez megnyitja a `main`cpp/ állományt a "c/c++ állományok" ablakban, és a szerkesztő kurzor már a `main()` első sorában is áll.

### Min változtassunk előszőr?

Kezdhetnénk az adott kód megváltoztatásával is, hogy eljussunk a kívánt változathoz, de az egész sokkal sokkal egyszerűbben is megoldható. Jelölje ki a `main()` funkció tartalmát az egérrel, vagy a Shift és a fel-le nyilak valamelyikének egyidejű lenyomásával. Ezután a "Szerkesztés" menüből válassza a "Kivágás" pontot, vagy egyszerűen üsse le a "Del" billentyűt a kijelölt kód törléséhez. Így kitörölte a main funkciót, ezért a nulláról kezdhetjük első példafeladatunk összeállítását.

### A példafeladat kódjának bevitele

A kód példafeladatból való beillesztéséhez, előszőr figyelmesen el kellene olvasnia azt, hogy megjegyezze melyik sor melyik kódot tartalmazza. Miután a példafeladatot sorról sorra elolvasta, példaként használhatja azt a saját gyakorlata megírásához.Akik a könnyebb megoldást alkalmaznák, jelöljék ki a kilistázott `main()` funkció tartalmát a dokumentum-böngészőben és nyomják meg a "Másolás" ikont az eszköztáron. Használhatja még az előreugró menüt, vagy az idevágó parancsot a "Szerkesztés" menüben. Végül a kiválasztott rész a vágólapra kerül, és miután visszavált a forráskód ablakra, a "Beillesztés" paranccsal bemásolhatja az előzöleg kijelölt részt (ugyanígy megteheti ezt a előreugró menüből, az eszköztár ikonnal vagy a "Szerkesztés" menü idevágó parancsával).Végül a `main()` funkción kívül addja hozzá az idetartozó fejléc állományokat :

> `

>     #include <qapplication.h>#include <qpushbutton.h>

> `

Ennyi az egész! Kész is van az első példafeladat forráskódja.

### A Helló világ! elkészítése

Az első példafeladat elkészítéséhez, válassza a "Make"-et a "Build" menüből, vagy pedig nyomja meg az ennek megfelelő ikont az eszköztáron. Tetszőlegesen választható még a "Végrehajt" parancs is, amely futtatja a kész alkalmazást, annak sikeres elkészítése után.Amennyiben az összeállítás valamilyen hiba folytán leállna, bizonyosodjon meg róla, hogy a hiba a példafeladatban, vagy pedig önben van-e. Szomorú dolog lenne egy hibát keresgélni éppen akkor, amikor elhatározta, hogy a KDE-hez és/vagy Qt-hoz fog programozni, de ez mindenképpen jó alkalom a KDEvelop használatának gyakorlására. A hiba megtalálásához két lehetőség is a rendelkezésére áll: vagy válassza ki az odavágó hibaüzenetet a kimeneti ablakban, amely ahhoz a sorhoz visz, ahol a hiba van, vagy pedig nyomja meg az F4-es gombot. Tetszőlegesen a "Következő Hiba" pontot is választhatja a "Nézet" menüben.

### Gyakorlatok

Most kérdezheti: "Gyakorlás? Eddig olyan egyszerű volt. Semmi szükségem gyakorlatokra!" Azonban meglátja, a dolgok kicsit bonyolódni fognak. Ez a lehető legegyszerűbb példa volt, de minél összetettebbek lesznek, annál több gondolkodást kívánnak majd öntől, hogy megértse és követni tudja a tananyag lépéseit. A gyakorlatok képessé teszik önt arra, hogy megtanulja a KDEvelop működését, és megismerje tulajdonságait.Hogy az első alkalmazás által is tanuljon még egy kicsit, hajtsa végre a következő változtatásokat a meglevő kódon, és figyelje meg, hogy ezek hogyan befolyásolják az alkalmazás viselkedését.

1. a nyomógombot cserélje le a `QLabel` -re
2. használja a `setText()` -et, a szöveg nyomógombkészítőben való közvetlen beállítása helyett
3. használja QPushButton::resize ( const Qsize & s ) -t a magasság és szélesség közvetlen megadása helyett. Először hozzon létre egy `QSize` példányt, amely tartalmazza a méretet
4. játszon el a mértettekkel, hogy lássa melyik a szélesség és melyik a magasság

## 3.2 A 2. és 3. lépés: Kiterjesztések

A leírás 2. és 3. részében tovább tágulnak a tananyag 1. részében feltárult lehetőségek. Ugyanúgy hallani fog most a jelekről (signal) és a fogadókról (slot), mint az elemek (widget) közti gyermek-szülő kapcsolatról.Miért fontos tanulni mindezekről? A jelek és a fogadók alkotják azt a technológiát, amely megkülönbözteti a Qt könyvtárakat más elemkönyvtáraktól. Ha bármikor is olyan problémába ütközne, hogy objektumok között szeretne kapcsolatot létrehozni, ez hihetetlenül lerövidíti a munkáját, és semmi végzetes nem történik, ha valami nem sikerül, még a hibás kapcsolódások sem vezetnek szegmentációs hibához. Ez a Qt könyvtár erőssége; és rugalmassasága miatt nem szívesen nélkülözné egyetlen KDE/Qt fejlesztő sem. A jel/fogadó (signal/slot) mechanizmus megértése alapvető feltétele bármilyen KDE/Qt alkalmazás létrehozásának.A másik dolog amire figyelnie kell az a tény, hogy a gomb bezárja a `Qapplication` példányt a `quit()` hívásával. Ismét találkozni fog a `quit()` -el, mikor a `QApplication` KDE-s megfelelőjével, a `KApplication` -al dolgozik majd.

## 3.3 Saját Elemek megírása

A `main()` funkció sikeres módosítása és kibővítése után elérte azt a pontot, hogy létrehozzon egy új, teljesen egyéni elemet, amelyet a 4. fejezet útmutatása alapján létrehozott osztály segítségével fog megírni. Lényegében az alkalmazás varázsló már létrehozta az ön számára az osztályt, így nem marad sok hozzáírni való, csak be kell illesztenie a 4. lecke által a `main.cpp` állományba írt kódot, a `MyWidget` osztály fejlécébe és "implementation?" állományába. Szerencsére csak az "implementation?"-t kell hozzáadnia a "constructor?" kódjáhozA megnyitáshoz válassza a "constructort?" a "classviewer?"-ből. Ez automatikusan az "implementation?"-hoz visz, ahova be kell illesztenie a kódot. Itt csak arra kell figyelnie, hogy a `qfont.h`- `QFont` tartalmát csak a `MyWidget` constructor kódja használja.Tehát a `#include <qfont.h>` sort illessze be a `mywidget.cpp` állomány tetejére.Az új alkalmazás futtatásához csak nyomja meg a "Végrehajt" gombot. Ez lefordítja a változásokat, miután elmentette őket.

## 3.4 Az Elemosztály kibővítése

Az ötödik rész célja az elemosztály kibővítése, ezért itt a virtuális funkciókról fog tanulni. A `resizeEvent()` itt reimplementálva található. Amit fontos megtanulnia (az osztály kibővítésén belül) az az, hogy a Qt, virtuális funkciók által foglalkozik a felhasználói eseményekkel úgy, hogy egy bekövetkezett eseményt paraméternek vesz. Éppen emiatt kényelmesebben dolgozhat a Qt könyvtár következő osztályit felhasználva:

- QEvent
- QChildEvent
- QCloseEvent
- QFocusEvent
- QKeyEvent
- QMouseEvent
- QMoveEvent
- QPaintEvent
- QResizeEvent
- QTimerEvent

Bármikor, amikor saját elemeket ír, különösen figyeljen arra az alkalmazások területén, hogy az alapértelmezett elemesemény-eljárás implementációját, önnek kell átírnia annak megfelelően, hogy milyen eseményeknek kell végrehajtódnia. Ezek pl. lehetnek:`virtual void mousePressEvent (QmouseEvent * )` amely azon egéresemény végrehajtásáért felel, amikor előreugrik egy context menu. Az implementációba be kell illesztenie egy előírt változót. A legtöbb fejlesztő a `event` , vagy egyszerűen a `e` -t, használja mint változónevet.Ezután végrehajtható az eseményre vonatkozó változó. Egy `QMouseEvent` -hez, rá kell kérdezni arra, hogy a középső, a bal- , vagy a jobboldali egérgomb váltotta-e ki az eseményt.

## 3.5 Új Osztály hozzáadása

A 6. leckében egy új osztályt kell hozzáadnia a megírt példaalkalmazáshoz. Most bizonyára azt gondolja, hogy "csak létrehozok egy fejléc- és egy implementációs állományt, aztán készen is vagyok." A KDevelop azonban még ennél is jobban megkönnyíti ezt az ön számára. Új osztály hozzáadásához használja az osztálygenerátort, ami elvégzi ön helyett a munka dandárját, így önnek csak az egyéni kódot kell beírnia.Új osztály hozzáadásához az osztálygenerátorral, válassza a "Projekt"-"Új osztály" menüpontot, ami megjelenít egy párbeszédablakot, ahol beírhatja a hozzáadandó osztályhoz szükséges összes értéket. Az első, amit be kell írnia, az osztály neve. A példafeladatban ez a `LCDRange`, tehát ezt kell beírnia előszőr. Ezután folytassa a baseclass-el. A baseclass az egyetlen olyan dolog, ami az új osztályba is átkerül. Ha megnézi a tananyagot (Qt 1.42), akkor látja, hogy ez a `QWidget` . Mint a legtöbb hozzáadandó GUI osztálynál, a `QWidget` kerülne át itt is, de az osztálygenerátor ezt leegyszerűsíti. Hagyja a baseclass cellát üresen és inkább jelölje be az "Additional Options"-ban a "QWidget child class"-et. Ez magától csatolja a szükséges `Q_OBJECT` makrót a fejlécállományhoz, hogy a fogadók és jelek később hozzáadódjanak (ami a 7. fejezetben szükséges is lesz).Az állománynevek maguktól bekerülnek, ezek miatt nem kell aggódnia. Az egyetlen dolog, amit javaslunk hozzáadni, az a leírás. Mindig jó egy részletező leírást mellékelni az osztályhoz, különösön akkor, ha annak neve ( `LCDRange` ) nem túlságosan beszédes.

## 3.6 A 7-14. lépés

Most már indent tud, ami a tananyag további lépéseihez szükséges, és kellően felkészült, hogy végre tudja hajtani a szükséges teendőket.Minden változtatás után indítson új szerkesztést és ellenőrizze, hogy a beírt kód nem hibás-e. Futtassa az alkalmazást és kísérje figyelemmel annak végrehajtódását. Ezenkívűl játszogathat még a KDevelop "Build" opcióival: hajtassa végre az alkalmazást olyan parancssori hibakeresővel, mint pl. a KDbg a kellékek ablakban. Ezek után tudnia kell futtatni az alkalmazást azokkal a Qt példaprogramokkal, amiket a Qt-hoz mellékelnek. A következő fejezetben megismeri a KDE 2-höz való fejlesztést egy példaalkalmazás segítségével ( KScribble ). Ez egy kis rajzprogram, amelyiken keresztül megtanulhatja az alkalmazástervezés koncepcióját és a programozást egyedül.

Következő Előző Tartalom