A slotfilequit() módosítása...18 Ami még hátra van...18 Projekt összeállítása Qt parancsokkal...19
|
|
- Viktória Dobosné
- 8 évvel ezelőtt
- Látták:
Átírás
1 ...2 Feladat...2 Beviteli mezők ellenőrzése...2 Ellenőrző objektumok (Validátorok)...3 QValidator::State...3 QValidator::validate()...3 QValidator::fixup()...3 Az adatbevitel ellenőrzésének lépései...3 Saját dátumvalidátor létrehozása...4 A DateValidator típus definíciója...4 Az illesztő privát művelet implementációja(match())...4 Az ellenőrző művelet implementációja (validate())...5 Alapértelmezett értéket visszaadó függvény implementációja (fixup())...5 Ellenőrzések a view osztályban...6 Ellenőrző objektumok létrehozása...6 Fordítás/Futtatás...7 Ellenőrzés az adatbevitel végén...7 Dátumellenőrző slotok implementációja...8 Ellenőrzések a számlatétel dialógusban...9 A CheckedItemDia osztály definíciója és implementációja...10 Fordítás/Futtatás...10 A documentchanged()/slotdocumentchanged() módosítása...11 Mentés fájlba, olvasás fájlból...12 A dokumentum osztály fájlkezelő műveletei...13 Új adattag a dokumentum osztályban (_filename)...13 A dokumentum objektum inicializálása (newdoc())...13 A save() művelet implementációja...13 A saveas() művelet implementációja...14 A load() művelet implementációja...14 A dokumetum osztály adatellenőrző függvénye (check())...15 A nézet osztály fájlkezelő slotjainak módosítása...15 A querysave() saját függfény...15 A slotfilenew() módosítása...17 A slotfileopen() módosítása...17 A slotfilesave() módosítása...17 A slotfilesaveas() módosítása...17 A slotfilequit() módosítása...18 Ami még hátra van...18 Projekt összeállítása Qt parancsokkal...19 A projektet alkotó összetevők forrása letölthető a people.inf.elte.hu/nacsa címről. 1. oldal
2 "! #%$&! #%'(!*)+,-$&.,/)1032., Ebben a munkafüzetben feltételezzük, hogy Ön már feldolgozta az SDI alkalmazás készítése Qt-ben I. és II, munkafüzeteket. A Qt SDI alkalmazás készítése I. és II.-ben elkészítettünk egy Qt SDI alkalmazást, felépítettük a view osztály felhasználói felületét, megvalósítottuk a számla típust, valamint a hozzátartozó számlatétel típust, megoldottuk a számla és a view összekapcsolását, és lehetővé tettük új számlatétel felvitelét, módosítását és javítását. ACBDFEHGIEKJ Biztosítsuk alkalmazásunban az ellenőrzött adatbevitelt, és tegyük lehetővé az egyes számlák mentését fájlba, illetve azok beolvasását fájlból. L BIMONPJQBDFNSRTBUWVIXYBDFDZB\[]V_^@UW`abB Az adatbevitelt az alábbiak szerint szeretnénk korlátozni: View osztály irányítószám (négy elemű, reguláris kifejezés) számlaszám (csak számjegy) dátumok (illeszkedés a megadott mintára+dátum ellenőrzés) Számlatétel dialógusablak darabszám (numerikus) egységár (numerikus) 2. oldal
3 I~KqQj_hwjIpO A Qvalidator osztállyal biztosíthatjuk alkalmazásunkban az input adatok ellenőrzött bevitelét. AQvalidator osztály egy absztrakt osztály. A belőle származtatottqintvalidator ésqdoublevalidator segítségével az egyszerűbb numerikus ellenőrzéseket oldhatjuk meg. A QRegExpValidator reguláris kifejezéseket használ, mellyel egy általánosabb adatellenőrzést valósíthatunk meg. Ha a beépített ellenőrző objektumok nem elegendőek, akkor származtatással előállíthatunk saját ellenőrző objektumokat is. Az osztálynak két virtuális függvénye van: validate() és fixup(). A validate() függvényt kötelező implementálni. A függvény visszatérési értéke Invalid (nem elfogadható), Intermediate (esetleg még jó lehet) vagy Acceptable (elfogadható), attól függően, hogy az ellenőrzött objektum milyen állapotban van. (Például, ha a megengedett szöveg 0 és 99 közé eső szám, akkor 444 státusza Intermediate, 55 státusza Acceptable, abc státusza Invalid.) A QValidator osztály publikus tagjai a következők: QValidator::State Felsorolás (enum) típusú adattag, mely jelzi, hogy az ellenőrzött input szöveg éppen milyen állapotban van. enum State Invalid, Intermediate, Valid = Intermediate, Acceptable QValidator::validate() virtual State validate ( QString & input, int & pos ) const = 0 A validate() függvény egy tiszta virtuális függvény, ezért a származtatott osztályokban kötelező definiálni. Ellenőrzi az input szöveg tartalmát, és visszaad egy State típusú értéket. Szükség esetén megváltoztathatjuk mind az input szöveg tartalmát, mind pedig a pos (a kurzor pillanatnyi helye) paraméter értékét is. QValidator::fixup() virtual void fixup ( QString & input ) const A fixup() függvény lehetővé teszi, hogy magunk is kijavíthassunk bizonyos adatbeviteli hibákat. Például a QLineEdit adatbeviteli mező esetén az Enter leütésekor a fixup() függvény kapja meg a vezérlést, ha az ellenőrző objektum State értéke nem Acceptable. i xy IxKqZl]eI ;zqqqedbewddze\f]g_h@iw Wƒy \f]e\p dz ; Wƒbez Ellenőrző objektum létrehozása Ellenőrző objektum viselkedésének beállítása Ellenőrző objektum és az adatbeviteli mező összerendelése Megjegyzés: Ellenőrző objektumok (validátorok) használatára már mutattunk egy egyszerű példát az Egyablakos alkalmazás készítése II. munkafüzet (Milliomos2) Numerikus input kezelése c. fejezetében. 3. oldal
4 Elemi alkalmazások fejlesztése III. ˆ%ŠŒ K bži K Q I ;ˆ F ŽI K Q _ 1 Z y Q % \ ] bš œsˆ A dátum típusú mezők ellenőrzésére létrehozunk egy saját DateValidator osztályt, melyet a a QValidator osztályból származtatunk. A DateValidator típus definíciója #include <qvalidator.h> class DateValidator : public QValidator Q_OBJECT public: DateValidator(QString pattern = " ", QObject *parent=0,const char *name=0): QValidator(parent,name), _pattern(pattern) virtual State validate(qstring &, int &) const; virtual void fixup(qstring &) const; private: bool match(const QChar &ch, int p) const; QString _pattern; ; datevalidator.h A Q_OBJECT makrót mindig meg kell adni, ha signal/slot mechanizmust használunk. A konstruktor egy üres törzsű függvény, ezért a datevalidaor.cpp-ben nem szerepel! Érdemes a Help-et használva bepillantani a QValidator osztályba. Az illesztő privát művelet implementációja(match()) A match() privát művelet vizsgálja az adott minta szerinti illeszkedést egy adott pozíción. bool DateValidator::match(const QChar &ch, int p) const if(p>=(int)_pattern.length()) return false; if(_pattern[p]=='1') return ch.isdigit(); else return (ch == _pattern[p]); datevalidator.cpp Saját jegyzet 4. oldal
5 ž Elemi alkalmazások fejlesztése III. Az ellenőrző művelet implementációja (validate()) A validáló művelet a kapott szöveget az eltárolt mintához illeszti. #include <qdatetime.h> #include "datevalidator.h" QValidator::State DateValidator::validate(QString &txt, int &pos) const int l=txt.length(); int i=0; for(;i<l && match(txt[i],i);++i); //empty body if(i<l) pos=i; //txt.truncate(i); return Intermediate; else if (i==l) if(l==(int)_pattern.length() && QDate::isValid(txt.mid(0,4).toInt(), txt.mid(5,2).toint(), txt.mid(8,2).toint())) return Acceptable; else return Intermediate; else return Invalid; datevalidator.cpp Ha jó a mintaillesztés, nézzük meg, valóban dátum-e. Alapértelmezett értéket visszaadó függvény implementációja (fixup()) A fixup() művelet hibás adat esetén kicseréli a szerkesztőmező tartalmát. void DateValidator::fixup (QString &txt) const QDateTime day = QDateTime::currentDateTime(); txt = day.tostring("yyyy") + "." + day.tostring("mm") + "." + day.tostring("dd"); datevalidator.cpp Legyen a mai dátum az alapértelmezés. Saját jegyzet 5. oldal
6 Ÿ1FZ \ ] W b \ «ªO K b ±² ³yµ_ S A view osztályban deklarálunk egy numerikus validatort a számlaszám ellenőrzésére (invnov), egy reguláris kifejezéseket ellenőrző validátort az irányítószám ellenőrzésére (zipv), valamint egy dátumvalidátort a dátum típusú mezők (dv) ellenőrzésére, majd a számla megfelelő mezőihez hozzárendeljük ezeket a validátorokat. Ellenőrző objektumok létrehozása #include "datevalidator.h" class InvoicerView : public InvoicerViewBase private: void initvalidators(); protected: DateValidator* dv; QRegExpValidator* zipv; QIntValidator* invnov; ; invoicerview.h InvoicerView::InvoicerView(QWidget *parent, InvoicerDoc *doc) : InvoicerViewBase(parent) initvalidators(); invoicerview.cpp A validátorokat létrehozó privát függvényt a konstruktorban hívjuk meg. void InvoicerView::initValidators() QRegExp regexp("[1-9][0-9]3,3"); zipv = new QRegExpValidator(regExp,this); zip->setvalidator(zipv); invnov=new QIntValidator(this); invno->setvalidator(invnov); dv=new DateValidator(" ",this); released->setvalidator(dv); fulfilled->setvalidator(dv); dueto->setvalidator(dv); invoicerview.cpp A regexp-ben megadott minta szerint az irányítószám első számjegye 1 és 9 közötti számjegy, melyet pontosan három darab 0 és 9 közé eső szám követ. A setvalidator() függvénnyel rendeltük hozzá az ellenőrző objektumokat az ellenőrizendő adatbeviteli mezőkhöz. 6. oldal
7 C _ >¹KºQ»¼S½n¾ _À]»»ÁK»¼ ½ Fordítsa le, majd futtassa a programot. Figyelje meg, hogy az ellenőrzött adatbeviteli mezőknél helyesen működik-e az adatbevitel. Mi történik, ha az adatbevitelt félbe hagyva átmegy egy másik mezőre? Â1ÃFÃZÄ\Å]Æ_Ç@ÈWÉÊ Ë È ËyÌIËKÍZÎ]ÏIÐOÑPÍQÏÒCÐÉOÓÔÉWÕ Alkalmazásunkban azt is szeretnénk biztosítani, hogy a dátumokat tartalmazó mezőkről csak akkor lehessen továbblépni, ha a mezőt teljesen és helyesen töltötték ki. Ehhez a vizsgálandó mezők lostfocus() signáljaitt összekötjük a vizsgálatot végző slotokkal, majd megadjuk a slotok implementációját. class InvoicerView : public InvoicerViewBase protected slots: void slotdocumentchanged(); void slotdocitemadded(invoiceitem*); void checkreleaseddate(); void checkfulfilleddate(); void checkduetodate(); invoicerview.h Alkalmazásunkban három dátum típusú mezőt szeretnénk ellenőrizni. ; InvoicerView::InvoicerView(QWidget *parent, InvoicerDoc *doc) : InvoicerViewBase(parent) initvalidators(); connect(released, SIGNAL(lostFocus()), this, SLOT(checkReleasedDate())); connect(fulfilled, SIGNAL(lostFocus()), this, SLOT(checkFulfilledDate())); connect(dueto, SIGNAL(lostFocus()), this, SLOT(checkDueToDate())); invoicerview.cpp connect( doc,signal(iteminserted(invoiceitem*)), this,slot(slotdocitemadded(invoiceitem*))); Amikor egy adatbeviteli mezőt elhagyunk (Tab-bal kiléptünk, vagy egérrel kikattintottunk a mezőből), akkor az adott vezérlő lostfocus() signált küld. A view osztály konstruktorában összekapcsoljuk a dátum típusú adatbeviteli mezők lostfocus() signálját és a dátumot ellenőrző slotokat, majd a slotokban elvégezzük az adatok ellenőrzését. 7. oldal
8 Dátumellenőrző slotok implementációja Számla kibocsájtás dátuma A számla kibocsájtás dátuma legyen az adott napi dátum, ha a mezőt üresen hagyták. Ha a mezőt csak részben töltötték ki, akkor írjunk ki fegyelmeztetést, és ne engedjük elhagyni ezt a mezőt. void InvoicerView::checkReleasedDate() if (released->text()=="") QDateTime day = QDateTime::currentDateTime(); QString str = day.tostring("yyyy") + "." + day.tostring("mm") + "." + day.tostring("dd"); released->settext(str); return; QString str = released->text(); int p = 0; if(released->validator()->validate(str,p)!= QValidator::Acceptable) QMessageBox::information( this, "InvoicerView", "Invalid date! \ndate format: \"yyyy.mm.dd\" "); released->setfocus(); invoicerview.cpp Számla kiegyenlítés dátuma void InvoicerView::checkFulfilledDate() QString str = fulfilled->text(); int p = 0; if(fulfilled->validator()->validate(str,p)!= QValidator::Acceptable && str!= "") qdebug(qstring::number(p)); QMessageBox::information( this, "InvoicerView", "Invalid date! \ndate format: \"yyyy.mm.dd\" "); fulfilled->setfocus(); invoicerview.cpp A számla kiegyenlítésének dátuma lehet üres is. 8. oldal
9 Számla esedékesség dátuma Ha a számla kifizetésének határideje üres, akkor 8 napos határidőt szabunk meg a számla kifizetésére. void InvoicerView::checkDueToDate() if (dueto->text()=="") QDateTime day = QDateTime::currentDateTime().addDays(8); QString str = day.tostring("yyyy") + "." + day.tostring("mm") + "." + day.tostring("dd"); dueto->settext(str); return; else QString str = dueto->text(); int p = 0; if(dueto->validator()->validate(str,p)!= QValidator::Acceptable) QMessageBox::information( this, "InvoicerView", "Invalid date! \ndate format: \"yyyy.mm.dd\" "); dueto->setfocus(); invoicerview.cpp Mához nyolc napra kell fizetni. Ö1 F ZØ\Ù]Ú_Û@ÜWÝÞbß\à á Þ\Ü âhãkäákåqýhåqßwäyæiçásäzè é êiþsë_ásì A számlatétel dialógus egy generált osztály (invitemdia.ui). Ha új funkciót akarunk hozzárendelni, akkor a generált osztályból származtatással létre kell hoznunk egy új osztályt, és ezt tudjuk kibővíteni a kívánt új funkciókkal. Legyen az InvItemDia osztályból származtatott ellenőrzött új osztály neve CheckedItemDia. Az osztály nagyon egyszerű, ezért a konstruktor feladatát inline módon adjuk meg, így nincs is szükségünk az osztály implementációs fájljára. Illesszen be egy új fájlt a projektjébe checkeditemdia.h néven. í Saját jegyzet 9. oldal
10 A CheckedItemDia osztály definíciója és implementációja #include <invitemdia.h> #include <qvalidator.h> #include <qlineedit.h> class CheckedItemDia : public InvItemDia Q_OBJECT public: CheckedItemDia(QWidget *parent,const char *name): InvItemDia(parent,name,true), v(this) unitprice->setvalidator(&v); quantity->setvalidator(&v); protected: QIntValidator v; ; checkeditemdia.h Ne feledkezzen meg az include - okról! A CheckedItemDia típus beillesztése az InvoicerView osztályba Cserélje le az alkalmazás InvItemDia példányait a most létrehozott, ellenőrzött CheckedItemDia példányokra. #include "checkeditemdia.h" void Invoicer::slotItemsNew() //invocer.cpp statusbar()->message(tr("inserting a new invoice item...")); //InvItemDia dlg(this,0,true); CheckedItemDia dlg(this,0); if (dlg.exec() == QDialog::Accepted) invoicer.cpp Ügyeljen arra, hogy a paraméterek száma is megváltozott!! void Invoicer::slotItemsEdit() statusbar()->message(tr("modifying current item...")); if(view->items->currentitem()) //InvItemDia dlg(this,0,true); CheckedItemDia dlg(this,0); InvoiceItem *ii = //invoicer.cpp Ügyeljen arra, hogy a paraméterek száma is megváltozott!! Fordítás/Futtatás Ellenőrizze munkáját. Készítsen el egy számlát, vigyen fel néhány számlatételt, majd módosítsa ill. törölje azokat. 10. oldal
11 îðïcñcò ókôöõ\ 1øù&úKûH Hü õ ï]ýÿþ Zñ]ø ñ_òsóiôtõw øù úkûh HüÔõ\ï ý þ ô _ïcñ Qø û Projektünket úgy készítettük el, hogy adatainkat a dokumentum osztályban, a felhasználói felületeket a view osztályban kezeljük. A dokumentum osztály adatainak megváltozásakor documentchanged() szignált küld. Ez a szignál a view osztály slotdocumentchanged() slotjára van rákötve. Ahhoz, hogy a view osztály megszerezze az adatokat, biztosítanunk kell a view osztály számára, hogy meghívhassa a dokumentum osztály adatlekérdező függvényeit. Ehhez a slotdocumentchanged() függvénynek rendelkeznie kell a dokumentum osztályra mutató pointerrel. Ezt a pointert a signal/slot kapcsolat paramétereként adjuk át. A fenti megfontolásokat figyelembe véve egészítsük ki az InvoicerDoc osztály documentchanged() és a InvoicerView osztály slotdocumentchanged() függvényeit egy, a dokumentum osztályra mutató pointert tartalmazó argumentummal. class InvoicerDoc : public QObject signals: void documentchanged(invoicerdoc* doc); void iteminserted(invoiceitem *i); ; invoicerdoc.h bool InvoicerDoc::load(const QString &filename) emit documentchanged(this); return true; invoicerdoc.cpp this: a dokumentum osztályra mutató pointer. class InvoicerView : public InvoicerViewBase Q_OBJECT protected slots: void slotdocumentchanged(invoicerdoc*); void slotdocitemadded(invoiceitem*); ; invoicerview.h InvoicerView::InvoicerView(QWidget *parent, InvoicerDoc *doc) : InvoicerViewBase(parent) initvalidators(); //connect(doc, SIGNAL(documentChanged()), // this, SLOT(slotDocumentChanged())); connect(doc, SIGNAL(documentChanged(InvoicerDoc*)), this, SLOT(slotDocumentChanged(InvoicerDoc*))); invoicerview.cpp Csak a paraméter típusát kell megadni, paramétert (változót) nem szabad!! 11. oldal
12 0 Elemi alkalmazások fejlesztése III. void InvoicerView::slotDocumentChanged(InvoicerDoc* doc) //TODO update the view customer->settext(doc->customer()); zip->settext(doc->zip()); city->settext(doc->city()); street->settext(doc->street()); invno->settext(doc->invno()); released->settext(doc->released()); fulfilled->settext(doc->fulfilled()); dueto->settext(doc->dueto()); QListIterator<InvoiceItem> it (doc->items()); items->clear(); for (; it.current(); ++it) InvoiceItem *ii = it.current(); new ListViewInvoiceItem(items,ii); invoicerview.cpp "!$#&%')(*!+,- /. A fájlkezelés két osztályt érint: az alkalmazás főablakát (Invoicer) és a dokumentum osztályt (InvoicerDoc). Fájlkezelő műveletek a dokumentumban (InvoicerDoc) newdoc: a dokumetum objektum kiürítése save: a dokumentum objektum elmentése az aktuális fájlba saveas: a dokumentum objektum elmentése a megadott nevű fájlba load: a dokumentum objektum beolvasása a megadott nevű fájlból Fájlkezelő slotok a főablakban (Invoicer) slotfilenew() slotfilesave() slotfilesaveas() slotfileopen() Saját jegyzet 12. oldal
13 13254"687"9 :;< 6G:$?:$AIHEJLKM$N$OIN8P NQ Új adattag a dokumentum osztályban (_filename) class InvoicerDoc : public QObject public: const QString dueto() const return _dueto; const QString filename() const return _filename; protected: QString _dueto; QString _filename; ; A dokumentum objektum inicializálása (newdoc()) void InvoicerDoc::newDoc() _customer = _zip = _city = _street = _invno= _released = _fulfilled = _dueto = ""; _items.clear(); _filename=""; modified = false; emit documentchanged(this); invoicerdoc.h A dokumentum osztályt kiegészítjük egy, a fájl nevét tartalmazó adattaggal és az adattag értékét visszaadó függvénnyel. invoicerdoc.cpp A save() művelet implementációja A save() függvénnyel elmentjük a számla tartalmát a tárolt fájlba szöveges (txt) formában. #include <fstream> using namespace std; bool InvoicerDoc::save() ofstream f(_filename); if (f) f << _customer.utf8() << endl << _zip.utf8() << endl << _city.utf8() << endl << _street.utf8() << endl << _invno.utf8() << endl << _released.utf8() << endl << _fulfilled.utf8() << endl << _dueto.utf8() << endl << _items.count() << endl; for (InvoiceItem *ii= _items.first(); ii; ii=_items.next()) f << ii->name().utf8() << endl << ii->unit().utf8() << endl << ii->quantity() << endl << ii->unitprice() << endl << ii->vatpercent() << endl; modified=false; return true; return false; invoicerdoc.cpp Ne feledkezzen meg az include-okról sem!!! Létrehozunk egy ofstream adatfolyamot, majd ide kiírjuk a számla fejlécét, és rendre a számlatételeket. A szöveget az ékezetek kezelése miatt utf8 típusú karakterekre konvertáljuk. 13. oldal
14 A saveas() művelet implementációja A saveas() művelet eltárolja a paraméterként kapott fájlnevet és meghívja a save műveletet. bool InvoicerDoc::saveAs(const QString &filename) _filename=filename; return save(); invoicerdoc.cpp A load() művelet implementációja Az adatokat betöltjük egy fájlból. A fájl nevét elmentjük a dokumentumosztály _filename adattagjába. Ezt a nevet használjuk majd annak eldöntésére, hogy mi történjen mentés, vagy mentés másként esetén az adatainkkal. bool InvoicerDoc::load(const QString & filename) ifstream f; char buf[1024], buf2[1024]; f.open(filename); if (f) f.getline(buf,1024); _customer = QString::fromUtf8(buf); f.getline(buf,1024); _zip = QString::fromUtf8(buf); f.getline(buf,1024); _city = QString::fromUtf8(buf); f.getline(buf,1024); _street = QString::fromUtf8(buf); f.getline(buf,1024); _invno = QString::fromUtf8(buf); f.getline(buf,1024); _released = QString::fromUtf8(buf); f.getline(buf,1024); _fulfilled = QString::fromUtf8(buf); f.getline(buf,1024); _dueto = QString::fromUtf8(buf); //load items _items.clear(); int ic, q, u, v; //quantity, unit price, vat f >> ic; f.getline(buf,1024); //skip rest of line while (ic>0) f.getline(buf,1024); //name f.getline(buf2,1024); //unit f >> q >> u >> v; InvoiceItem *ii=new InvoiceItem(QString::fromUtf8(buf), QString::fromUtf8(buf2), q, u, v); f.getline(buf,1024); //skip rest of line _items.append(ii); --ic; _filename=filename; emit documentchanged(this); modified=false; return true; return false; invoicerdoc.cpp 14. oldal
15 A dokumetum osztály adatellenőrző függvénye (check()) A dokumentum osztály ellenőrző függvénye egy hibaüzenetet ad vissza, ha hibásan töltötték ki a számlát. A nézet osztály ezt a függvényt hívja meg annak eldöntésére, hogy helyes-e a számla, azaz menthető-e. class InvoicerDoc : public QObject public: const QString filename() const return _filename; const char* check(); ; invoicerdoc.h const char* InvoicerDoc::check() if (_customer.isempty()) return "The invoice cannot be saved \n until a customer is specified."; if (_zip.isempty() _city.isempty() _street.isempty()) return "The invoice cannot be saved \n until the address is specified."; if (_invno.isempty()) return "The invoice cannot be saved \n until an invoice number is specified."; if (_items.count() ==0) return "The invoice cannot be saved \n without any item added."; return 0; invoicerdoc.cpp RTS/U$VWGX'YZ+V+X[ \C]E^ [_\ `GW$VW$\baEc dbe/fgh i j"h8kllm"n5ec o fp c h A querysave() saját függfény Ha az aktuális számlánkat még nem mentettük el, akkor új számla létrehozásakor (New), létező számla betöltésekor (Open), illetve kilépéskor (Quit) illik megkérdezni, mi legyen a nem mentett adatokkal. Ezt a kérdést a programban több helyen is fel kell tenni, ezért e kérdés felvetésére bevezetünk egy segédfüggvényt (querysave()) 15. oldal
16 class Invoicer : public QMainWindow Q_OBJECT invoicer.h /** overloaded for Message box on last window exit */ bool queryexit(); bool querysave(); ; bool Invoicer::querySave() if(doc->ismodified()) int r = QMessageBox::warning(0, "Warning", "There are unsaved changes\n Save them?", "Save", "Discard", "Cancel"); if (r==0) const char* err=doc->check(); if (err!=0) return false; if(doc->filename().isempty()) QString fn = QFileDialog::getSaveFileName(0, "*.inv", this); if(!fn.isempty()) return doc->saveas(fn); else return false; else return doc->save(); else if (r==1) return true; else return false; else return true; invoicer.cpp A querysave() visszatérési értéke hamis, ha nem engedélyezett a mentés. Ha a dokumentumot módosítottuk, akkor rákérdezünk, mi legyen a módosításokkal. Ha menteni szeretnénk a számlát, akkor először a dokumentum osztályban megvizsgáljuk, hogy a számla tartalma helyes-e. Hibás számla esetén nem engedélyezzük a mentést. Ha a számla hibátlan, akkor attól függően, hogy új számlát hoztunk-e létre, vagy létező számlát módosítottunk (van-e név a dokumentum osztály _filename adattagjában), meghívjuk a saveas((), vagy a save() függvények valamelyikét. A querysave() segédfüggvény elkészülte után módosítsuk a nézet osztályunkban a fájlkezelő slotokat. 16. oldal
17 A slotfilenew() módosítása void Invoicer::slotFileNew() if (!querysave()) return; statusbar()->message(tr("creating new file...")); doc->newdoc(); setcaption(doc->filename()); statusbar()->message(tr("ready.")); invoicer.cpp Ha a querysave() segédfüggvény értéke hamis, nem mentjük a fájlt. A főablak címe legyen az aktuális fájl neve. A slotfileopen() módosítása void Invoicer::slotFileOpen() //invoicer.cpp if (!querysave()) return; statusbar()->message(tr("opening file...")); QString filename = QFileDialog::getOpenFileName(0,0,this); if (!filename.isempty()) doc->load(filename); setcaption(filename); QString message=tr("loaded document: ")+filename; statusbar()->message(message, 2000); else statusbar()->message(tr("opening aborted"), 2000); invoicer.cpp A slotfilesave() módosítása void Invoicer::slotFileSave() if(doc->filename().isempty()) slotfilesaveas(); return; statusbar()->message(tr("saving file...")); const char* err=doc->check(); if(err==0) doc->save(); else QMessageBox::information(this,"Missing information", err, 1); statusbar()->message(tr("ready.")); invoicer.cpp Ha nincs betöltött fájl, akkor saveas(). Ha a doc nem találta hibásnak a számlát, akkor save(), egyébként hibaüzenet. A slotfilesaveas() módosítása 17. oldal
18 void Invoicer::slotFileSaveAs() statusbar()->message(tr("saving file under new filename...")); QString fn = QFileDialog::getSaveFileName(0, 0, this); if (!fn.isempty()) const char* err=doc->check(); if(err==0) doc->saveas(fn); setcaption(doc->filename()); else QMessageBox::information(this,"Missing information",err,1); else statusbar()->message(tr("saving aborted"), 2000); statusbar()->message(tr("ready.")); invoicer.cpp A slotfilequit() módosítása Ha az alkalmazásunk dokumentuma egy nem mentett számla, akkor mielőtt bezárnánk az alkalmazásunkat kérdezzünk rá, mi legyen ezzel a számlával. void Invoicer::slotFileQuit() statusbar()->message(tr("exiting application...")); if (!querysave()) return; statusbar()->message(tr("exiting application...")); qapp->quit(); statusbar()->message(tr("ready.")); invoicer.cpp qsrut rlv*wyx"z" ~ 8 ƒ ƒ ƒ Önálló feldogozásra javasoljuk az alábbi feladatok megoldását: számlatételek összegzése a view sum mezőjében tételműveletek engedélyezése/tiltása a listview tartalmának függvényében fájlkezelés során előforduló hibák kezelése 18. oldal
19 ˆ Š Œ Ž ' ' + $ + š 8œ/ ' A projektet összeállíthatja a Qt parancssori eszközeivel is. 1. Hozzon létre a projekt számára egy könyvtárat: invoicer 2. Hozza létre (vagy a honlapomról töltse le) az alábbi fájlokat: invoicer.h, invoicer.cpp, invoicerdoc.h,invoicerdoc.cpp, invoicerview.h,invoicerview.cpp, datevalidator.h, datevalidator.cpp, checkeditemdia.h, main.cpp, invitemdia.ui, invoicerviewbase.ui. 3. Hozza létre a projekt könyvtárában az images könyvtárat, és másolja oda az ikonok kép fájljait: new.png, open.png, save.png 4. Nyisson meg egy terminál ablakot. Legyen a projekt könyvtárban (invoicer). 5. Hozza létre a platformfüggetlen projekt fájlt (invoicer.pro): qmake -project 6. A képek (ikonok) alkalmazása miatt az automatikusan generált projekt fájlt (invoicer.pro) egészítse ki az alábbiak szerint: ###################################################################### # Automatically generated by qmake (1.04a) Tue Apr 13 15:56: ###################################################################### TEMPLATE = app INCLUDEPATH +=. # Input HEADERS += checkeditemdia.h \ datevalidator.h \ invoicer.h \ invoicerdoc.h \ invoicerview.h INTERFACES += invitemdia.ui invoicerviewbase.ui SOURCES += datevalidator.cpp \ invoicer.cpp \ invoicerdoc.cpp \ invoicerview.cpp \ main.cpp IMAGES += images/new.png \ images/open.png \ images/save.png A projektet alkotó összetevők forrása letölthető a people.inf.elte.hu/nacsa honlapról. 19. oldal
Elemi alkalmazások fejlesztése III
Elemi alkalmazások fejlesztése III C++/ Qt alapú SDI alkalmazás készítése III. Készítette: Szabóné Nacsa Rozália Steingart Ferenc 1 Ami már kész van: Készítettünk egy Qt SDI alkalmazást. 2 Ami már kész
Elemi alkalmazások fejlesztése III
Elemi alkalmazások fejlesztése III SDI alkalmazás készítése Qt-ben III. Készítette: Szabóné Nacsa Rozália Steingart Ferenc Ami már kész van: Készítettünk egy Qt SDI alkalmazást. Ami már kész van: Megterveztük
Elemi alkalmazások fejlesztése III
Elemi alkalmazások fejlesztése III C++/ Qt alapú SDI alkalmazás készítése I. Készítette: Szabóné Nacsa Rozália Steingart Ferenc 1 Feladat Készítsünk egy számlakezel ő ablakos alkalmazást! Számlafejléc
Elemi alkalmazások fejlesztése III
Elemi alkalmazások fejlesztése III Qt SDI alkalmazás készítése I Kdevelop környezetben Készítette: Szabóné Nacsa Rozália Steingart Ferenc 1 Feladat Készítsünk egy számlakezel ő ablakos alkalmazást! Számlafejléc
C++/Qt alapú SDI alkalmazás készítése II...2
...2 Feladat...2 A dokumentum típus módosítása...2 A fejlécet ábrázoló mezők deklarálása...3 Mező lekérdező műveletek...3 Mező beállító slotok...3 Az adatbeviteli mezők és az adattagok összekötése...4
ELTE Informatikai Kar
Qt SDI alkalmazás készítése II...2 Feladat...2 A dokumentum típus módosítása...2 A fejlécet ábrázoló mezők bevezetése...3 A bevezetett mezők lekérdező műveletei...3 A bevezetett mezők beállító slotjai...3
Elemi alkalmazások fejlesztése III. SDI alkalmazás készítése Qt-ben I.
SDI alkalmazás készítése Qt-ben I...3 Feladat...3 A projekt osztálydiagramja...3 A projekt modulszekezete...4 Új projekt létrehozása...5 A számla megtervezése...5 Vezérlőelemek és paraméterezésük...6 Az
Elemi alkalmazások fejlesztése III.
Elemi alkalmazások fejlesztése III. MDI alkalmazás II. (Számla) Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2007 1 Számla felépítése fejléc tábla 2 Az alkalmazás
Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 1/3
Tartalomjegyzék Feladat...2 A számla elemei...2 A dokumentumot tároló fájl felépítése...3 A számlakészítő program osztálydiagramja...4 Field osztály...4 field.h...4 field.cpp...5 Fields osztály...6 fields.h...6
Elemi alkalmazások fejlesztése III.
Elemi alkalmazások fejlesztése III. Egy ablakos alkalmazás készítése II. C++ / Qt / KDevelop felhasználásával készítette: Szabóné Nacsa Rozália lektorálta: Párniczky Krisztina 1 Fájlkezelés Olvasás 2 A
Elemi alkalmazások fejlesztése III.
Elemi alkalmazások fejlesztése III. Bevezetés Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2007 1 A Qt assistant nyitó ablaka www.trolltech.com 2 Alkalmazás
Elemi alkalmazások fejlesztése III.
Elemi alkalmazások fejlesztése III. Grafikus felületű alkamazások készítése Bevezetés I. Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2009 1 www.trolltech.com
Elemi alkalmazások fejlesztése
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
Felhasználó által definiált adattípus
Felhasználó által definiált adattípus C++ Izsó Tamás 2017. február 24. Izsó Tamás Felhasználó által definiált adattípus/ 1 Irodalom Izsó Tamás Felhasználó által definiált adattípus/ 2 Programtervezési
3. Osztályok II. Programozás II
3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt
Programozás II. 2. Dr. Iványi Péter
Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c
Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 3/3
Tartalomjegyzék Feladat...2 Az alkalmazás osztálydiagramja...2 Űrlap elkészítése...3 Grafikus felület kialakítása...3 A felületen elhelyezett elemek...3 invoiceform.h...3 invoiceform.cpp...5 Főablak elkészítése...11
Programozás C++ -ban
Programozás C++ -ban 4. Bevezetés az osztályokba 4.1 Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több
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 Ajánlott ir odalom Egy ablakos alkalmazás készítése I. C++ / Qt felhasználásával Qt dokumentáció online: www.trolltech.com lokális változat: Kdevelop help vagy /usr/share/doc...
4. Öröklődés. Programozás II
4. Öröklődés Programozás II Mielőtt belevágunk Egy Tárgy típusú objektumokat tároló tömb i. elemében tároljunk el egy új tárgyat Rossz módszer: tomb[i].setnev( uj.getnev() ); tomb[i].setertek( uj.getertek()
Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása
Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/eaf4/ Qt 4 2007
Elemi alkalmazások fejlesztése III
Elemi alkalmazások fejlesztése III Egy ablakos alkalmazás készítése I. C++ / Qt felhasználásával készítette: Szabóné Nacsa Rozália 1 Ajánlott irodalom Qt dokumentáció online: www.trolltech.com lokális
Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 2/3
Tartalomjegyzék Feladat...2 Az alkalmazás osztálydiagramja...2 Modell-nézet (model-view) tervezési minta (bevezetés)...3 Számlatételek kezelése, karbantartása ( táblázat kezelés )...4 A táblázatkezelő
OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.
OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Szimuláljuk különféle élőlények túlélési versenyét. A lények egy pályán haladnak végig, ahol váltakozó viszonyok vannak. Egy lénynek
Programozás II gyakorlat. 6. Polimorfizmus
Programozás II gyakorlat 6. Polimorfizmus Típuskonverziók C-ben: void * ptr; int * ptr_i = (int*)ptr; Ez működik C++-ban is. Használjuk inkább ezt: int * ptr_i = static_cast(ptr); Csak egymással
Egységes és objektumközpontú adatbázis-kezelés (2. rész)
Egységes és objektumközpontú adatbázis-kezelés (2. rész) A folytatásában a bemutatjuk, hogyan kezelhetünk Qt rendszer alatt SQL sormutatót, és készíthetünk grafikus felületet programoknak a Qt Designer
3D-s számítógépes geometria és alakzatrekonstrukció
3D-s számítógépes geometria és alakzatrekonstrukció 3a. Tesztkörnyezet I http://cg.iit.bme.hu/portal/node/312 https://portal.vik.bme.hu/kepzes/targyak/viiima01 Dr. Várady Tamás, Salvi Péter BME, Villamosmérnöki
Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék
Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma
A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.
Vizuális programozás 1. A gyakorlat célja A gyakorlat célja a Könyvtár alkalmazás folytatása az előző gyakorlaton elkészített grafikus felület felhasználásával. Elsőként lemásoljuk az előző gyakorlat eredményeként
Programozás II gyakorlat. 4. Öröklődés
Programozás II gyakorlat 4. Öröklődés Feladat Egy játékfejlesztő cég olyan programot fejleszt, amely nyilvántartja az alkalmazottai adatait. Tároljuk minden személy: Nevét (legfeljebb 50 karakter) Születési
Alkalmazások fejlesztése III. Qt 4 /C++ alapú grafikus alkalmazás Bevezetés I.
Tartalomjegyzék Alkalmazás készítés Qt osztályokkal...2 A qmake eszköz...2 Hello Qt (hello)...2 Objektumok közötti kommunikáció (quit)...3 Fordítás/futtatás...4 Grafikus felület létrehozása, vezérlők szinkronizálása
ISA szimulátor objektum-orientált modell (C++)
Budapesti Műszaki és Gazdaságtudományi Egyetem ISA szimulátor objektum-orientált modell (C++) Horváth Péter Elektronikus Eszközök Tanszéke 2015. február 12. Horváth Péter ISA szimulátor objektum-orientált
1. Alapok. Programozás II
1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph
SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME
SDI ALKALMAZÁS I. Feladat: Készítsünk egy olyan alkalmazást, amely az év végi adózás céljából rögzíti egyetlen évközi bevételnek az adatait: bruttó jövedelem adóel ı leg nettó bevétel jövedelem forrása
Maximum kiválasztás tömbben
ELEMI ALKALMAZÁSOK FEJLESZTÉSE I. Maximum kiválasztás tömbben Készítette: Szabóné Nacsa Rozália Gregorics Tibor tömb létrehozási módozatok maximum kiválasztás kódolása for ciklus adatellenőrzés do-while
C++ programozási nyelv Konstruktorok-destruktorok
C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék
Elemi alkalmazások fejlesztése III.
Elemi alkalmazások fejlesztése III. Memóriajáték 1. Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2007 1 memorygame Játék közben 2 memorygame Kártyák kiválasztása
OOP: Java 4.Gy: Java osztályok
OOP: Java 4.Gy: Java osztályok. 36/1 B ITv: MAN 2019.03.02 Feladat Készítsen el egy Employee osztályt és egy Employee osztályt használó osztályt (EmpProgram). Az Employee osztálynak: van name és salary
117. AA Megoldó Alfréd AA 117.
Programozás alapjai 2. (inf.) pót-pótzárthelyi 2011.05.26. gyak. hiányzás: kzhpont: MEG123 IB.028/117. NZH:0 PZH:n Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
Objektumok inicializálása
Objektumok inicializálása Miskolci Egyetem Általános Informatikai Tanszék Objektumok inicializálása CPP4 / 1 Tartalom public adattagok inicializálása felsorolással konstruktor objektum tömbök osztály típusú
Elemi alkalmazások fejlesztése IV.
Elemi alkalmazások fejlesztése IV. C++/Qt adatbáziskezelő alkalmazás készítése Kdevelop környezetben I. Készítette: Szabóné Nacsa Rozália 1 MySql elindítása [nacsa@localhost nacsa]$ su Password:jelszó
MySql elindítása. Elemi alkalmazások fejlesztése IV. Feladat. Az alkalmazás adatbázisa
Elemi alkalmazások fejlesztése IV. C++/Qt adatbáziskezel ő alkalmazás készítése Kdevelop környezetben I. MySql elindítása [nacsa@localhost nacsa]$ su Password:jelszó [root@localhost nacsa]# /usr/bin/safe_mysqld
STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1
STL gyakorlat C++ Izsó Tamás 2016. május 9. Izsó Tamás STL gyakorlat/ 1 Komponensek kapcsolata Deklarálja az alábbi osztálydiagramon szereplő osztályok közül az A, AA és AB osztályokat! A konstruktorokat
Programozás II gyakorlat. 8. Operátor túlterhelés
Programozás II gyakorlat 8. Operátor túlterhelés Kezdő feladat Írjunk egy Vector osztályt, amely n db double értéket tárol. A konstruktor kapja meg az elemek számát. Írj egy set(int idx, double v) függvényt,
Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor
Java Programozás 4. Gy: Java GUI Tipper, MVC kalkulátor 15/1 B ITv: MAN 2018.03.10 1. Feladat: Tipper Készítsük el a tippelős programunk grafikus változatát. Az üzleti logika kódja megvan, a felület pedig
Programozás C++ -ban 2007/7
Programozás C++ -ban 2007/7 1. Másoló konstruktor Az egyik legnehezebben érthető fogalom C++ -ban a másoló konstruktor, vagy angolul "copy-constructor". Ez a konstruktor fontos szerepet játszik az argumentum
HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport
10-es Keressünk egy egész számokat tartalmazó négyzetes mátrixban olyan oszlopot, ahol a főátló alatti elemek mind nullák! Megolda si terv: Specifika cio : A = (mat: Z n m,ind: N, l: L) Ef =(mat = mat`)
Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1
C++ I/O Bevezetés Izsó Tamás 2014. február 20. Izsó Tamás C++ I/O / 1 Section 1 Bevezetés Izsó Tamás C++ I/O / 2 Irodalom Izsó Tamás C++ I/O / 3 Paraméter illesztés függvénynév túlterhelés esetén 1 Pontos
Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE motiabt@inf.elte.
Programozási alapismeretek :: beadandó feladat Készítő adatai Név: Molnár Tamás EHA: MOTIABT.ELTE E-mail cím: motiabt@inf.elte.hu Gyakorlatvezető: Horváth László Feladat sorszáma: 23. Felhasználói dokumentáció
1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció
1. Öröklés Az objektum orientált tervezés fontos sarkköve, az osztályok viszonyainak a megtervezése. 1.1. Rétegelés c l a s s Address {..... c l a s s Name {..... c l a s s P e r s o n { Name name ; Address
Access adatbázis elérése OLE DB-n keresztül
Access adatbázis elérése OLE DB-n keresztül Készítsünk egy grafikus felülető alkalmazást, ami lehetıvé teszi egy Access adatbázisban tárolt hallgatói adatok (EHA, Név, e-mail cím) lekérdezését (összes
WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens
WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens Hozzunk létre egy ASP.NET Empty Web Site projektet! A projekt neve legyen WCFAPP1. Ez
Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész
Java Programozás 9. Gy: Java alapok Adatkezelő 5.rész 15/1 B ITv: MAN 2018.04.22 A Keresés funkció Programlogika: 1. A keresés az etm táblamodellben fog keresni, és a találat rekordokat átmásolja egy másik
osztályok kapcsolata Származtatatás C++ Izsó Tamás 2014. március 19. Izsó Tamás Származtatatás/ 1
Származtatatás C++ Izsó Tamás 2014. március 19. Izsó Tamás Származtatatás/ 1 Dinamikus tagváltozó az osztályban class RVektor { i n t n ; R a c i o n a l i s p ; p u b l i c : RVektor ( i n t n=10 ) :
Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia
Öröklés ism. Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Szeberényi Imre BME IIT Egy osztályból olyan újabb osztályokat származtatunk, amelyek rendelkeznek
A jobboldalon a pnlright egy Stacked Widget Állítsuk be az első lapot és nevezzük el pnldraw-ra:
A Rajzolás lap A rajzolás lap elemi rajzolási lehetőségek bemutatására szolgál. A rajzolás a jobboldali pnlright widget egyik lapjára rakott widgetre történik. A pnlright egy több lapot tartalmazó widget
Programozás II. 4. Dr. Iványi Péter
Programozás II. 4. Dr. Iványi Péter 1 inline függvények Bizonyos függvények annyira rövidek, hogy nem biztos hogy a fordító függvényhívást fordít, hanem inkább az adott sorba beilleszti a kódot. #include
Programozás C++ -ban
8. Dinamikus objektumok Programozás C++ -ban Ahhoz hogy általános prolémákat is meg tudjunk oldani, szükség van arra, hogy dinamikusan hozhassunk létre vagy szüntethessünk meg objektumokat. A C programozási
Adatbázis-kezelés API hívásokkal. Adatbázis-kezelés ODBC-vel. Adatbázis-kezelés SQL parancsokkal. Adatbázis-kezelés ODBC-vel.
Adatbázis-kezelés API hívásokkal hívások Adatbázis-kezelés -vel Készítette: Szabóné Nacsa Rozália 2004. november API 2 API 2 hívások Adatbázis-kezelés parancsokkal Adatbázis-kezelés -vel eljárások 1 parancsok
AWK programozás, minták, vezérlési szerkezetek
10 AWK programozás, minták, vezérlési szerkezetek AWK adatvezérelt szkriptnyelv text processing, adat kiterjesztés, tagolt adatok automatizált soronkénti feldolgozása a forrásállományt soronként beolvassa
Szoftvertechnolo gia gyakorlat
Szoftvertechnolo gia gyakorlat Dr. Johanyák Zsolt Csaba http://johanyak.hu 1. Dependency Injection (függőség befecskendezés) tervezési minta A tervezési minta alapgondolata az, hogy egy konkrét feladatot
Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.
Sapientia - EMTE 2008 Az előadás célja JPA - - perzisztencia ORM - - Objektumrelációs leképzés - Entitásbabok Állandóság Mechanizmus amely során az alkalmazás adatai megőrzésre kerülnek valamely perzisztens
OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN
OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás
3D-s számítógépes geometria és alakzatrekonstrukció
3D-s számítógépes geometria és alakzatrekonstrukció Tesztkörnyezet I http://cg.iit.bme.hu/portal/node/312 https://portal.vik.bme.hu/kepzes/targyak/viiima01 Dr. Várady Tamás, Dr. Salvi Péter BME, Villamosmérnöki
Grafikus Qt programok írása segédeszközök nélkül
Grafikus Qt programok írása segédeszközök nélkül Grafikus felületű Qt programokat ahogy láttuk, készíthetünk egy egyszerű szövegszerkesztővel is, bár a Qt jó támogatást ad a grafikus felület grafikus tervezésére
Entity Framework alapú adatbáziselérés
Entity Framework alapú adatbáziselérés Dr. Johanyák Zsolt Csaba http://johanyak.hu A gyakorlat célja Model-first megközelítéssel Entity-Framework modell létrehozása, majd ebből adatbázis generálása LocalDB-ben.
1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon
1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (
Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése
Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése Készítette: Gregorics Tibor Szabóné Nacsa Rozália Alakítsunk át egy infix formájú aritmetikai kifejezést postfix
Osztály és objektum fogalma
Osztály és objektum fogalma A C++ programozási nyelv I. CPP1/ 1 Az osztály (class) class: adatok és módszerek (method) (függvények) együttese, amely absztrakt adattípusként működik. objektum: egy osztály
INFORMATIKAI ALAPISMERETEK
Informatikai alapismeretek középszint 1021 ÉRETTSÉGI VIZSGA 2011. május 13. INFORMATIKAI ALAPISMERETEK KÖZÉPSZINTŰ ÍRÁSBELI ÉRETTSÉGI VIZSGA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ NEMZETI ERŐFORRÁS MINISZTÉRIUM
7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.
7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II. A gyakorlat célja: 1. A shell vezérlő szerkezetei használatának gyakorlása. A használt vezérlő szerkezetek: if/else/fi, for, while while, select, case,
Programozási nyelvek Java
Programozási nyelvek Java 9. gyakorlat Fájlkezelés A fájlkezelés Java-ban különböző osztályok összekapcsolásával történik. Minden egyes osztály valamilyen minimális szolgáltatást tesz hozzá a többihez.
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
A lista eleme 0 adat rész mutató rész Listaelem létrehozása p: Node 0 0 3 0 Az elemet nekünk kell bef zni a listába Deklarálás struct Node { int int value; Node* next; next; adattagok Létrehozás Node*
és az instanceof operátor
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
Pénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Sztringek Osztályok alapjai Sztringek Szöveges adatok kezelése Sztring Karakterlánc (string): Szöveges adat Karaktertömbként tárolva A szöveg végét a speciális
Adabáziselérés ODBC-n keresztül utasításokkal C#-ban
Adabáziselérés ODBC-n keresztül utasításokkal C#-ban 1. Előkészítés Access adatbázis lemásolása, ODBC DSN létrehozása Másoljuk le az alábbiakat: Mit Honnan Hova list.mdb p:\johanyák Csaba\Vizualis programozas\data\
Budapest, 2007. március. ELTE Informatikai Kar
Tartalomjegyzék Alkalmazás készítés Qt osztályokkal...2 A qmake eszköz...2 Hello Qt (hello)...2 A projekt elkészítésének lépései...3 Objektumok közötti kommunikáció (quit)...3 A projekt elkészítésének
Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
Programozás II. ATM példa Dr. Iványi Péter
Programozás II. ATM példa Dr. Iványi Péter 1 ATM gép ATM=Automated Teller Machine Pénzkiadó automata Kezelő szoftvert szeretnénk írni Objektum-orientált módon 2 Követelmények Egyszerre csak egy embert
Java Programozás 11. Ea: MVC modell
Java Programozás 11. Ea: MVC modell 20/1 B ITv: MAN 2018.03.02 MVC Model-View-Controller A modell-nézet-vezérlő a szoftvertervezésben használatos szerkezeti minta. Az MVC célja elválasztani az üzleti logikát
munkafüzet open eseményéhez
Makrók használata az Excelben - munkafüzet open eseményéhez VBA-eljárás létrehozása Az Auto_Open makróval kapcsolatos fenti korlátozások megkerülhetők az Open eseményhez rendelt VBA-eljárással. Példa Auto_open
Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN
Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN B IT v: 2016.03.03 MAN Csomagok A DBMS csomagok a PL/SQL alkalmazások fejlesztését segítik, bennük tároljuk a létrehozott programok kódjait. A specifikációs
Programozás Minta programterv a 1. házi feladathoz 1.
Programozás Minta programterv a 1. házi feladathoz 1. Gregorics Tibor 1. beadandó/0.feladat 2008. december 6. EHACODE.ELTE gt@inf.elte.hu 0.csoport Feladat Egy osztályba n diák jár, akik m darab tantárgyat
11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.
11. gyakorlat Sturktúrák használata I. Új típus új műveletekkel 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi. typedef struct datum { int ev; int ho; int nap;
Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés
Bevezetés a programozásba 2 7. Előadás: Objektumszű és osztályszű elemek, hibakezelés ISMÉTLÉS Osztály class Particle { public: Particle( X, X, Y); virtual void mozog( ); ); virtual void rajzol( ) const;
Programozás alapjai 9.Gy: Struktúra 2.
Programozás alapjai 9.Gy: Struktúra 2. Ördögi részletek P R O A L A G 35/1 B ITv: MAN 2018.11.10 Euró árfolyam statisztika Az EURO árfolyamát egy negyedéven keresztül hetente nyilvántartjuk (HUF / EUR).
Pénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Folyamok kezelése Fájlok írása/olvasása Folyamok kezelése Szabvány folyamok Eddig Kiírás a szöveges konzolra:
Informatika terméktervezőknek
Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások
Programozási nyelvek Java
Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 13. előadás Throwable Error Exception RuntimeException IOException Saját (általában) Nem ellenörzött kivételek (Unchecked
BME MOGI Gépészeti informatika 7.
BME MOGI Gépészeti informatika 7. 1. feladat Írjon Windows Forms alkalmazást egy kör és egy pont kölcsönös helyzetének vizsgálatára! A feladat megoldásához hozza létre a következő osztályokat! Pont osztály:
500. AA Megoldó Alfréd AA 500.
Programozás alapjai 2. NZH 2010.05.13. gyakorlat: / Hiány:0 ZH:0 MEGOLD IB.027/51. Hftest: 0 Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden
Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!
Tartalomjegyzék Általános Információ! 2 Felhasználói dokumentáció! 3 Feladat! 3 Környezet! 3 Használat! 3 Bemenet! 3 Példa! 3 A program eredménye! 3 Példa! 3 Hibalehetőségek! 3 Példa! 3 Fejlesztői dokumentáció!
AWK programozás, minták, vezérlési szerkezetek
10 AWK programozás, minták, vezérlési szerkezetek AWK futtatási módok AWK parancs, közvetlen programkódmegadás: awk 'PROGRAMKÓD' FILE példa: ls -l awk '{print $1, $5}' a programkód helyére minden indentálás
Adatbázis-kezelés ODBC-vel
Adatbázis-kezelés ODBC-vel Készítette: Szabóné Nacsa Rozália 2004. november Adatbázis-kezelés API hívásokkal Alkalmazás Adatbázis 1 API 1 API 1 hívások Adatbázis 2 API 2 Alkalmazás API 2 hívások Adatbázis-kezelés
QLabel *label = new Qlabel("Hello Qt!",0);
#include #include int main(int argc,char **argv) QApplication app(argc,argv); QLabel *label = new Qlabel("Hello Qt!",0); app.setmainwidget(label); label->show(); return app.exec();
Programozási Nyelvek: C++
Programozási Nyelvek: C++ Gyakorló feladatkönyv Umann Kristóf #include "CppStudent.h" int main() { CppStudent *reader = new CppStudent(); reader->readbook(); while(!reader->doesunderstand()) { reader->exercise();
Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása
Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 10. gyakorlat C++: alprogramok deklarációja és paraméterátadása 2011.11.22. Giachetta Roberto groberto@inf.elte.hu
OOP: Java 8.Gy: Abstract osztályok, interfészek
OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus
Szövegek C++ -ban, a string osztály
Szövegek C++ -ban, a string osztály A string osztály a Szabványos C++ könyvtár (Standard Template Library) része és bár az objektum-orientált programozásról, az osztályokról, csak később esik szó, a string
Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás. 1.1. Szükséges névterek. 1.2. Attribútumok. 1.3.
Sorosítás (szerializáció) és helyreállítás Cél: a memóriában tárolt adatok egyszerű lemezre mentése és visszatöltése. A sorosítás során létrehozunk egy állományt és egy sorosítást kezelő objektumot. Ez