Elemi alkalmazások fejlesztése

Hasonló dokumentumok
Elemi alkalmazások fejlesztése III.

Feladat. Tervezés és implementálás

QLabel *label = new Qlabel("Hello Qt!",0);

Elemi alkalmazások fejlesztése III. A Qt assistant elindítása. Ajánlott ir odalom. A Qt assistant nyitó ablaka

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III.

Programozás II gyakorlat. 4. Öröklődés

Programozás C++ -ban 2007/4

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Programozás C++ -ban

Grafikus Qt programok írása segédeszközök nélkül

4. Öröklődés. Programozás II

ö ü ü ö Ő ü í ü í ü ö ö Ö ó ö ö ö ö ó ö ö ö í ü í Ő Ü ü ö í Á í ü ü ü ö ű ú ö ö ü í Ü Ő ü ü ó ó ó ó í í ó í ö ú ü ü Ö Ö ű ó í ó ó ü ú ü ü ö í ó Ő Ü ó

Alkalmazások fejlesztése III. Qt 4 /C++ alapú grafikus alkalmazás Bevezetés I.

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

Elemi alkalmazások fejlesztése III.

í í ú Í ő ő ó í ő ó ó ú ü ó ó ü ó ú ú Á ő í í ő ó ó ü ú ü í í ő ú ő ü ő í ó ó ó ü ő ü ő ü ő í í ő üí ó í ő ó í ó ü ő í ó ü í ő ő í ó ő í ő ü ü í ú í Í

Ó ö ű Ü Ó Ó Ö Ö Í Ó Ö Ú Ö Ű Ü Ö Ö ö Ü Ó Í ö Ü Í Ü Ú Ö Í Ó Ó Ó Ö Ö Á Ó Ü Ó Ó Ö Ó Ó Ó Ö Ö Í Ó Ö Ó Ó Ó É Ü ű Ó ú

ő ő ú ú ő ö ö ö ö ő ö ü ű ü ö ú ö ö ű ü ő ő ő ő ú ő ü ő ő ő ő ő ü ő Ö ő ö ü ő ö ő ú

ú ü ő ú ú ü ő

ú ú ü ü ú ü Í ü ú ü ú ü ú ü ü ű ü ú ű Í ü ü ú ű ü ű ű ü ü ü ü ű ú Ú ú

ó ö í ó í ó í í ü ü í ó ó í ó ó í í Á ö í ö ó ú í ó ó í

ö Ö Í ó ö ü ö ö ó ó ü ó Í ö ö ö ó Á ü ü

é é é é í é ű ü ü é ú é í é ü ü é í ű é é é é é é é é ü é ü é ü é í é é é é í é ü é é ü ü é ü ű é é é ű ü é ü ü é ű é ü é éú é ü é ü ű é ü é éú é é é

ö é é ú ö ú Ü ő ű ó ő é ó ú ó ó é é é ó ö é ó é ó é ő ő é ü é ó é ó ő ű é Ó é ü é ó é ü ó ó é ü ó é ő é

ö í Á Á Á ö É É í É Á Á Á Á Á É ő ö í ő ö ő ö í ü ő ö ő ö ő ü ö ő ö í ő ő ő ö í ő ő ú ö ű ö ő ö í

ö ö í í í í ö í í í í í í í í ö ú ö í í í í í ö ö ü í ö í ö í í í ü í í ö Í í ö ü ű í í í í í

Elemi alkalmazások fejlesztése IV.

MySql elindítása. Elemi alkalmazások fejlesztése IV. Feladat. Az alkalmazás adatbázisa

É í

í ü ü ú í ü ú ú É Á í ű Á ú í ü í Ő Ű í Ó ű í ü í ű Ú ú É í ü í í

ó í ú ő ó ó ü ő í ú ó ü Ö Í ö ő ü ö ö ó ő ü Ü ö Ö ö ü ó ü ú ö Ö í í ő ö ü ú ü ü ó í ő ő ü í ü É ő ő Í ö ö ó ő ó ó ő ü ö ü ő ó ő ő ö Ö ő ü ő ő ő ü ö ö

ö ü ü ö ö í Ö Í ü ö ü ö ü Á Á í ö Í í Í ö í Í ö Í ü üí ü ö Í ű ö í í

Bevezetés a programozásba Előadás: A const

3. Osztályok II. Programozás II

ú Ó É Ö ü ü Ö ü ű ü ü ó í ó ü ó ü ó ó ó ó ú ü ó ü ó ü ó ü í ü ó ü ü ű ó ó ó ü ó ó ü ű ü ó í ü ü ű ü ü ü í ú ü ú ó ó ó ó ó ó í ó ó ó ó ó ó ü ó ü ü ó ó

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

A jobboldalon a pnlright egy Stacked Widget Állítsuk be az első lapot és nevezzük el pnldraw-ra:

Osztály és objektum fogalma

Felhasználó által definiált adattípus

í ű ű ö í ö í ű í ú ű ű ű í Í í ö í Í ÍÍ ö ü ö í ű í ö ö ö ű í í ö í ö í ü ö í í í ű í ű ö ö ö í ű ö ö ű ü ö ö ö í ú ü ű ö ú í ö ö í ü ö ö í í í í í í

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Á Ö Ú Ü Á ő ü ű ö ő ő ö ü ö Á ö Ü ö ü ő ő ő ő ő ő ő ő ü ö ü ő ö ő ö ő ő ő ö ő ő

ú ü ü ú

É Í ó Í Í ó Íó ó ó Á ó ú ö ű ü ú Á Í ó ó

ű ő ö ő ő ü ő ö ő Á ő ő ő ő ü ő ő Ó ö ü ü ő ö ű ő ő Ö ő ü űő Ö ú ő ü ú ö ő ö ü ő ü ö ő ö ő Ő ő ü ő ö ü ő ü ö ő ő ű ö ő ö ö ö ü ö ú

ú í ü ü ö ű í í í í ü ö ö ö ö í í í ű í ö Á ö ö í í ü ö ü ü ű

Í Ó É É É É Ó Ó ú ú Ó Ő Í Ó Ö Ó

ö ö Í ü ö ü ö ű Ü ö ö ö ö ö Ö Ó ö ö Ö ö ö ü ű ö ü ö ö ű ö ü

ű Í ő ű ü ő ő ú ő ű ü

Ö í ó ű í íű ű ó ó ó ó ó ó ó ó ü ó ó Ö ó ü ó ü ó ú ú ú Ö ó ó ó í ó ü úú ü í ó ó ó í Ó Ó ó í Ö í ó ú í ú í ó ü ü ú í í ú í ü ú í

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Ú É Í Ü Ü É Í

ó í Í ü ö ú ó ü ű ó í ó ó ú ű ü ö Ö ü ú Í Ö ü ú ö ú ó ó ó ú ó ó ú ű í ű ö ü ü ú ü Í ü ó ú ö ú ü í ü ú ö ü ú í ú ú ú ó

É Ú í í í í í ü í í ű ű í í í í í í í í í í É í É í í É í í É í É í ű í í É í í É í í í É í í í í í ü í Ó É Ű

ü ö ö ö ü Ü ö Ö Ö ü ü ü ö ö ö Ü Ö Ö ö ö Í ö ö ö ö ö ö üü ö ö ö ö ú ö ö ö ö ö ö ö ö ü ú ö Ö Ö ö ö ö ö Ö Á ö ö ö ü ö ö

ő ü ü ü ü ő Ö ő ő ő ü ő ő ő ü ü ő ü ő ő ü ü ő ü ő ü ú Á ú ő ü ő ő ő ü ő ü ú ú Ö ő ü ű ü ő ő Ö ú ő ő ő ő ü

ö ő ó í í ő ő í í ú ó í ő ü ö ö ő í ő ó í ó ó í ö ő í ó ú ó í í í í ö ő ő ő ő ö Ö ü ó ö ü ö ö ö ő í ő ö ő í ö í í ü ö í ú ü ő ö ö ó ö ő í ő ö ő ö ö ő

Ö í ó í ű í Ö ó ú ű í ú ű Í ú Ó Ú ű ó í Ő Ő ű í í í Í ú ú í ú í Í Ó ó ú ó ó í Á ű Í Ű í Ő Á ó Ö ű ó ű

ő í ö ü ö ő ő ü ö ü ő ő ö ö ö ü í ő ö ö ü í í í ü ő ő í í ú í ő

Programozás I. 5. Előadás: Függvények


117. AA Megoldó Alfréd AA 117.

í ü Ó Ö Ö ó Ö í ú í ó ó ó í ü í í í ó Ö ó ü í í ó ü í ú ó í í í ü ó í ó í ó ó ü ü ó ó ó ű ű ó í ó í ó ó ű í í ű Á

Ö Ö Ö í í ü í ű ú í ú

Ö Ö Ú Ó Ö ű Ő Ő ű ű Ü Ő Ó Ő

ö ö ö ö ö ö ö ü ö ü ö ű ö ú ü ű ö ü Í ö ú ü ü ű ö ú ü Á ü

ő ö ő ú ő ö ö ő ó ő ö ü ú ö ö ó ő ö ü ó ó ó ó ő ő ő ó ó ú ő ü ő ö ö ó ü ö ö ő ű ö ö ő ú ú ó ö ő ű ö ó

é ú é é é é é é é é é é é é ú é ö é é é ö Ő é é é ú é é é é é é é é ö é é é ö é Ö é é ö é ö é é é ű é ö ö é ö é é ö ö é é ö ö é ö é Ö é ú é é é é é é

C++ programozási nyelv Struktúrák a C++ nyelvben Gyakorlat

ó ú ú ü ú ő ó ő ő ó ó ó ö ó ü ő ó ő ö ü ü ó ö ő É ó ö ö ö ó ó ö ü ü ö ü ó ó ő ó ü ó ü ü ö ö É ú ó ó ö ú ö ü ü ó ó ó ü Á ö ö ü ó ö ó ö ö ö ö ó ó ö ó ó

ö ö ó ú ö ö ú ü ó ö ö Í ö ö ö ü ó ö ö ú ú ö ü ó ü ó ü ö ú ü ó ü ö ó Á Á ö ü ú ó ö ü ü ö ó ü ü Á ü ö ü ö ü ö ö ö ü ö ú ö ö ö ü ú ö ú ö ű ú ú ü ö ó ö ö

é ö é Ö é é ő í ó í é ő ö ú é ó é ő ü ü é ó ö é é ó é é ö é ő í é é ő é é ö é ű ö é í ó é é í ö í ó í ó é é ö ó í ó ó í ó é é ö ő í ó ó í ó ü é í ü

ú ú ü ü Á ú ú ü ű ű ú ü ü ü ü

É ö Ű ő ű ő ő ű ű

í ó ő í é ö ő é í ó é é ó é í é é í é í íí é é é í é ö é ő é ó ő ő é ö é Ö ü é ó ö ü ö ö é é é ő í ő í ő ö é ő ú é ö é é é í é é í é é ü é é ö é ó í é

ő ő ő ő ú É ü ú ú ű ú ű ő ő ő ő Á Á ü ő É É É É É É Á Ú Á Á ő ő ő ő ő É Á Á Á ő ő ő Á ü ő ő ü

ú ú ö ö ü ü ü ü ű ü ü

ü ö ú ö ú ü ö ü Á Ó ö ö ö ö ú ü ú ü ü ú ú ö ö ü ü ú ü ü ö ö ű ö ü ü ü ü ö ö

Ö Ö ű ű ű Ú Ú ű ű ű Ú ű

É Í ü ú É ü ő ő ő ő ú ő ú ü ü ő ü ú ü ű ú ú ü ü Í ü ű ő ő É ő

ő ö ő ű ó ö ó ű Í Ö Ö Á Í Ó Ö Ü É Ö Ö Ö Á Á Ö É Á Ö

Í Í Í Ü Ó Ó Ö Á Ü Ü Ó Ü Ü Ó Ö Í É Ö

Ü ü Ü Ö Ó ö ü ö Ó Ú Ó ü Ó ö ö Á ö ö ö ö ü

ú ü ü ú Ö ú ü ü ü ü ü ú ü ú ü ű Í ü ü ű ü ű Ó ü Ü ű ú ú Á ü ű ű ü ü Ö ü ű ü Í ü ü

ű í ú ü ü ü ü ü Ó í ü í í í É Á

ö ö Ö ó ó ö ó ó ó ü ö í ü ú ó ó í ö ö ö ó ö ü ú ó ü ö ü ö ö Ö ü ö ö Ö ó

í Ó ó ó í ó ó ó ő í ó ó ó ó

Í Í Ó ű Ü Ó Ó Ü ü Ö Í Ü Í Í ú Ö Ó Í ú ú Ö Ó É Í ű ú

ő ő ő ő ő ő ú ő ü Á ü ü ő ő ő ő ő ő ő ő ő ő Ö Ó ő ő ő Ö ő ő ő

É ő ő ű ú Á ő Á ő ű ő ő ő ő ő ő ő ő ű ú ű ű ő ő ő ű

ű ú ú Ö ó Ö ó ó ó Ö ű ó ű ű ü Á ó ó ó ó ü ó ü Ö ó ó ó Ö ű ű ü Ö ű Á ú ú ú ó ű í í Ő ú Á É Ö í ó ü ű í ó ű ó Ö ú Ő ú ó í ú ó

ö ü ü ú ó í ó ü ú ö ó ű ö ó ö í ó ö í ö ű ö ó Ú ú ö ü É ó í ö Ó Á í ó í í Ú ö ú ö ű ü ó

ú Ü Í ú ú ú ú ú ú

ö Ó ű ö ó í ó ü ö Ó ó í ö ö ó Ö ó ö í ó í ó Á í ó Á Á Ő ú ü ó Í ü ú ü

Átírás:

Egyablakos alkalmazás készítése II...2 Osztályszerkezet...3 Modulszerkezet...3 A kérdés rekord felépítése: Question...4 A kérdéssor típus: QuestionIterator...4 A QuestionIterator osztály beillesztése a projektbe...4 A kérdésértékek tömbje: money...6 Konstruktor...6 Bejáró műveletek: first(), next(), end(), current()...6 Publikus segédfüggvények: fallbackvalue(), previousvalue()...7 Kérdések fájlja...7 Beolvasó művelet: readnext()...7 Az UI osztály kiterjesztése...8 MillMain osztály...9 MillMain osztály includes...9 Konstruktor...9 Public slot: newquestion()...10 Public slot: checkanswer(int)...10 Public slot: endgame()...11 Privát művelet: displayquestion()...12 A módosított főprogram...13 Numerikus input kezelése...13 A validátor...14 QValidator leszármazottak: QIntValidator, QDoubleValidator...14 A CnumMain osztály...15 A CnumMain konstruktor és a calculate() slot...15 A főprogram...16 ELTE, TTK, ÁSZT 2002/2003 1. oldal

"!$#&%'!$(*),+-! %.(/!0%213!54760+3(*80+94;:.<=80+?>A@.@CB Ebben a munkafüzetben feltételezzük, hogy Ön már feldogozta az Egyablakos alkalmazás készítése I. munkafüzetet, és elkészítette az ott tárgyalt mill alkalmazást. Most ezzel fogunk tovább dolgozni. Ha azt szeretné, hogy az előző gyakorlat eredménye is megmaradjon, akkor másolja át a mill alkalmazás fájljait egy új alkönyvtárba, és úgy oldja meg az itt bemutatott feladatokat. Az Egyablakos alkalmazás készítése I. -ben megterveztük a Legyen Ön is millliomos játékot szimuláló program grafikus felületét, és meghatároztuk, melyek azok az események, amelyeket kezelni szeretnénk. Ebben a részben az alábbi feladatokat oldjuk meg: 1. Készítünk egy új osztályt QuestionItertator -, amely a kérdések kezelésével foglalkozik. 2. Megadjuk az eseménykezelők pontos működését. 3. Teszteljük a programot. ELTE, TTK, ÁSZT 2002/2003 2. oldal

S DFE9GIH=J KML&ENG7O&PRQ/O"GIO9H T UVXW KCE9G7O$PYQ/O5G7O9H A QtDesigner-rel készített ablakhoz az alkalmazásspecifikus működést a MillMainBase osztályból származtatott MillMain osztályban adjuk meg. S ELTE, TTK, ÁSZT 2002/2003 3. oldal

u Z\[/]&^=_]0À^=a$[/bc^d_feda g']$hjilkd]"`?amon-p"a0`qksr'bct Az egy kérdéshez tartozó informácót a Question rekord típusba foglaljuk bele. question: a kérdés szövege answers: a lehetséges válaszokat tartalmazó négyelemű tömb good: a helyes válasz indexe value: a kérdés értéke explanation: további információ a kérdéssel kapcsolatban struct Question string question; string answers[4]; int good; int value; string explanation; Z\[/]&^=_]0`9`?bv^&k=iwh&p$` mon-p"a0`qksr'bct$x'k=a&^=y9k=bv^ A felhasználói felülettől függetlenül valósítjuk meg a kérdések sorozatát reprezentáló típust. A típus interface-ét iterátor-jellegű műveletekkel definiáljuk. További segédfüggvények: first(): az első kérdésre áll next(): a következő kérdésre áll end(): visszadaja, hogy a kérdéssor végére értünk-e current(): az aktuális kérdést adja vissza fallbackvalue(): hibás válasz esetén visszaadja a nyeremény összegét previousvalue(): megállás esetén visszaadja a nyeremény összegét z ~" 5 l.ƒ5 5 q =ˆ5 ƒ" ƒ9 /Š/ l qœ' -Ž Œ Œ2 /Š/ N ˆ, ƒy j.ž Workspace/Mill/Jobb egérfül/new Class... Classname: QuestionIterator Baseclass: - Header file: questioniterator.h Implementation file: questioniterator.cpp Inheritance: public ELTE, TTK, ÁSZT 2002/2003 4. oldal

questioniterator.h #include <string> #include <fstream> using namespace std; #ifndef QUESTIONITERATOR_H #define QUESTIONITERATOR_H struct Question string question; string answers[4]; int good; int value; string explanation; ; class QuestionIterator public: QuestionIterator(const char *fn); ~QuestionIterator(); void first(); void next(); bool end(); const Question& current(); private: int fallbackvalue(); int previousvalue(); Question _current; ifstream _qf; int _level; ; static const int _maxlevels=16; static const int money[ _maxlevels ]; void readnext(); #endif ELTE, TTK, ÁSZT 2002/2003 5. oldal

šnœq Ÿž œ9œq R œ*šn *š 2 5 o? 9 3ª5«7 const int QuestionIterator::money[_maxlevels]= 0,5000,10000,25000,50000,100000, 200000,300000,500000,800000,1500000, 3000000,5000000,10000000,20000000,40000000; ªj«55 s jšj ª" QuestionIterator::QuestionIterator(const char *fn): _qf(fn),_level(0) ±³² ݵ& = ¹»ºj¼0²0½¾²N d² À"Á9ÂsÃ2 sä/ ŸÅÆsÇ5È"²?É5 dåwæ Ç?² È"ÊÅÆ Ç?Ë0Ì Y d²$èj ŸÅÆ void QuestionIterator::first() _level=0; _qf.seekg(0); readnext(); void QuestionIterator::next() readnext(); bool QuestionIterator::end() return (_level == _maxlevels); const Question& QuestionIterator::current() return _current; ELTE, TTK, ÁSZT 2002/2003 6. oldal

é é é Í Î5Ï5Ð ÑCÒNÎ9Ó Ó9Ô;Õ Ö* 0ØwÙ/Õ"ÕvÚÖ*Û9Ü5Ô Ò9ÝjØ ÞqÐ Ð.ßvÞ9à Ò&áNÞqÐ.Î"Ô?âäã=å/æ,ç ÔjÚ;Ñ.è"Î9ÓáNÞqÐ.Î"Ô?âäã int QuestionIterator::fallBackValue() return money[(_level/5)*5]; int QuestionIterator::previousValue() return money[_level-1]; ê³ë&ì=íë0îqï$ð ñdòôó õ óyö A kérdések fájlja 15 darab, az alábbi módon leírt kérdést tartalmaz: <kérdés szövege> <első válasz> <második válasz> <harmadik válasz> <negyedik válasz> <helyes válasz indexe (0..3)> <magyarázat> Példa Melyik Andrew Lloyd Webber legújabb műve? Whistle down the WindowThe Beautiful Game Evita Les Miserables 1 A Les Mis nem Webber, hanem Schönberg-Boublil musical. A B.G. bemutatója 2000. szeptemberében volt. < Mennyi ideig tartott a harmincéves háború?... ELTE, TTK, ÁSZT 2002/2003 7. oldal

øqù9úû;üqýnþ ÿ û7ø ú.ø sø ü ø void QuestionIterator::readnext() if (_level!= _maxlevels) char line[255]; _qf.getline(line,255); _current.question=line; for (int i=0; i<4; i++) _qf.getline(line,255); _current.answers[i]=line; _qf >>_current.good; _current.explanation=""; for (_qf.getline(line,255); _qf && line[0]!= '<'; _qf.getline(line,255)) _current.explanation+='\n'; _current.explanation+=line; _level++; _current.value=money[_level]; A <magyarázat> kivételével minden mező egy sorból áll. A magyarázat végét egy, csak a < karaktart tartalmazó sor jelzi. "!$#%'& ()+*,-.*$ "/ * A QtDesignerrel készített ablakhoz az alkalmazásspecifikus működést származtatással adjuk meg. A MillMain osztályt a MillMainBase osztályból örököltetjük. Az osztály feladatai: egy QuestionIterator objektum létrehozása és használata a publikus slotok felüldefiniálása ELTE, TTK, ÁSZT 2002/2003 8. oldal

E a 02143536087914:<;>=?A@+B93DC millmain.h #ifndef MILLMAIN_H #define MILLMAIN_H #include <millmainbase.h> #include <questioniterator.h> class MillMain : public MillMainBase Q_OBJECT public: MillMain(QWidget *parent=0, const char *name=0); ~MillMain(); public slots: void newquestion(); void endgame(); void checkanswer(int); private: QuestionIterator _qi; void displayquestion(); ; #endif FHGJIKI4FHLMGJN<OQPSRT5UMI)VXWYGJN[Z\I6] ^$_`P Ne feledkezzen meg a megfelelő header fájlok beillesztéséről! millmain.cpp #include "millmain.h" #include <qvariant.h> #include <qbuttongroup.h> #include <qlabel.h> #include <qlcdnumber.h> #include <qpushbutton.h> #include <qradiobutton.h> #include <qtextedit.h> #include <qlayout.h> #include <qtooltip.h> #include <qwhatsthis.h> ELTE, TTK, ÁSZT 2002/2003 9. oldal

m bdcqe f gihkjqlqgich millmain.cpp MillMain::MillMain(QWidget *parent, const char *name): MillMainBase(parent,name), _qi("questions.txt") _qi.first(); displayquestion(); n>o p qkr4shtmq4u9v wx[y z oỳ t vjr6uqx[~ connect( nextbutton, SIGNAL( clicked() ), this, SLOT( newquestion() ) ); millmain.cpp void MillMain::newQuestion() _qi.next(); displayquestion(); A next nyomógomb clicked() szignáljához kötött slot a QuestionIterator objektumot a következő kérdésre állítja és megjeleníti a kérdést. > ƒk 4 H Mƒ4 9ˆ SŠ9 M SŒŽ [ d M 4 J ˆD connect( ansgroup, SIGNAL( clicked(int) ), this, SLOT( checkanswer(int) ) Az ansgroup rádiógomb-csoport clicked(int) szignáljához kötött slot feladatai: az aktuális kérdéshez tartozó magyarázat megjelenítése a válasz ellenőrzése jó válasz esetén a nextbutton gomb engedélyezése rossz válasz esetén: a nyeremény megjelenítése a vége üzenet kiírása az ansgroup rádiógomb-csoport letiltása az endbutton nyomógomb letiltása ELTE, TTK, ÁSZT 2002/2003 10. oldal

ª millmain.cpp void MillMain::checkAnswer(int sel) text->settext(_qi.current().explanation.c_str()); if (sel ==_qi.current().good) nextbutton->setenabled(true); endbutton->setenabled(false); else moneyvalue->display(_qi.fallbackvalue()); moneyvalue->setsegmentstyle(qlcdnumber::filled); text->append("\n GAME OVER\n"); ansgroup->setenabled(false); endbutton->setenabled(false); > šk 4œH Mš4ž9Ÿ S $ < connect( endbutton, SIGNAL( clicked() ), this, SLOT( endgame() ) ); Az endbutton nyomógomb clicked(int) szignáljához kötött slot feladatai: millmain.cpp a nyeremény megjelenítése a nextbutton gomb letiltása az ansgroup rádiógomb-csoport letiltása az endbutton nyomógomb letiltása az aktuális kérdéshez tartozó magyarázat megjelenítése a vége üzenet kiírása void MillMain::endGame() moneyvalue->display(_qi.previousvalue()); moneyvalue->setsegmentstyle(qlcdnumber::filled); nextbutton->setenabled(false); ansgroup->setenabled(false); endbutton->setenabled(false); text->settext(_qi.current().explanation.c_str()); text->append("\n GAME OVER"); ELTE, TTK, ÁSZT 2002/2003 11. oldal

É «> " ± ² ³µ ` 4 ¹ ºQ» ¼K½ ¾ ĶÀSÁÂÄÃ `½Q¹5¼4Å Æ[ÇÈ Ezt a privát műveletet hívjuk meg a konstruktorból és a newquestion() slotból. Feladatai: ha még nem értünk a kérdések végére az aktuális kérdés adatainak megjelenítése a megfelelő widgetekben a next nyomógomb letiltása az ansgroup rádiógomb-csoport engedélyezése az endbutton nyomógomb engedélyezése ha a kérdések végére értünk a nextbutton letiltása az ansgroup rádiógomb-csoport engedélyezése a vége üzenet kiírása millmain.cpp void MillMain::displayQuestion() if (!_qi.end()) questionlabel->settext(_qi.current().question.c_str()); ans1->settext(_qi.current().answers[0].c_str()); ans2->settext(_qi.current().answers[1].c_str()); ans3->settext(_qi.current().answers[2].c_str()); ans4->settext(_qi.current().answers[3].c_str()); moneyvalue->display(_qi.current().value); nextbutton->setenabled(false); ansgroup->setenabled(true); endbutton->setenabled(true); else nextbutton->setenabled(false); moneyvalue->setsegmentstyle(qlcdnumber::filled); text->settext("\n GAME OVER \n"); ELTE, TTK, ÁSZT 2002/2003 12. oldal

î Þ ÊÌË ÍÎ Ï>ÐMÑ5Ò"Ï[Ò+ÒÓ"ÔÖÕØ +Ù ÚÛ "Ü[Ý main.cpp #include <qapplication.h> #include "millmain.h" int main( int argc, char ** argv ) QApplication a( argc, argv ); MillMain *main = new MillMain(); a.setmainwidget(main); main->show(); return a.exec(); ß àøá<âãkä4åàæçä4èéàêûåâëaâ9ì)í$æ â Készítsük el az alábbi interface-szel rendelkező egyszerű számolóprogramot: Kössük a Számolj! feliratú calc nyomógomb clicked() signálját a befoglaló ablak calculate() slotjához, és rendeljük a Vége feliratú exit gombot a quit() kilépéshez. ELTE, TTK, ÁSZT 2002/2003 13. oldal

ï További feladatok: ðòñ ómôkõ5öq øiùú Soreditorok korlátozása: csak egész számokat lehessen megadni A calculate() slot implementációja A Qvalidator absztrakt osztály deklarálja az input szöveg ellenőrzésének interface-t. a Qvalidator::State típus értéke: Invalid Intermediate Acceptable a Qvalidator::validate(QString &txt, int&pos) pure virtual függvény Ellenőrzi a txt string tartalmát, és visszaad egy State típusú értéket Megváltoztathatja mind a txt, mind a pos paraméter értékét û8ü ýþjÿ Qý þ Xý 5ý$û ü ýþjÿ Qý 9û!#" þ$ $ü ýmþkÿ Qý# % A QIntValidator osztály egész számok inputját tudja ellenőrizni. Az elfogadott értékek intervallumként adhatók meg. A QDoubleValidator osztály lebegőpontos számok inputját tudja ellenőrizni. Az elfogadott értékek intervallumként adhatók meg. Lehetséges a tizedesszámjegyek korlátozása. ELTE, TTK, ÁSZT 2002/2003 14. oldal

= &('*)+#,.-0/21)43#5687 92:<; cnummain.h #ifndef CNUMMAIN_H #define CNUMMAIN_H #include <qvalidator.h> #include "nummain.h" class CNumMain : public NumMain Q_OBJECT QIntValidator *v; public slots: void calculate(); public: CNumMain(QWidget *parent=0, const char *name=0); ~CNumMain(); ; #endif >(?*@A#B.C0D2E@GFIH#@ J K LMA#F#K H LONJPDRQD2S Q2ASTD K UVXWOJ2S HK A konstruktor feladatai: validátor objektum létrehozása a validátor hozzárendelées a soreditorhoz A calc nyomógomb clicked() szignáljához kötött slot feladatai: Számmá konvertálja a soreditor szövegét Kiszámítja az összeget Megjeleníti az eredményt a képernyőn ELTE, TTK, ÁSZT 2002/2003 15. oldal

Y h cnummain.cpp #include <qapplication.h> #include <qlineedit.h> #include <qpushbutton.h> #include <qlcdnumber.h> #include "cnummain.h" CNumMain::CNumMain(QWidget *parent, const char *name): NumMain(parent,name) v = new QIntValidator(this); op1->setvalidator(v); op2->setvalidator(v); CNumMain::~CNumMain() void CNumMain::calculate() res->display(op1->text().toint() + op2->text().toint()); Z\[^]8_a`cb2dO`feg main.cpp #include <qapplication.h> #include <qfont.h> #include "cnummain.h" int main(int argc, char *argv[]) QApplication a(argc,argv); a.setfont(qfont("helvetica",12)); CNumMain *main=new CNumMain(); a.setmainwidget(main); main->show(); return a.exec(); ELTE, TTK, ÁSZT 2002/2003 16. oldal