Elemi alkalmazások fejlesztése III. SDI alkalmazás készítése Qt-ben I.
|
|
- Jenő Takács
- 5 évvel ezelőtt
- Látták:
Átírás
1 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 InvoicerDoc osztály...7 Az InvoicerDoc osztály definíciója...7 Az InvoicerDoc osztály implementációja...7 Eseménykezelés QAction osztállyal...8 Az InvoicerView osztály...9 Az InvoicerView osztály definíciója...9 Az InvoicerView osztály implementációja...9 Főablak: QMainWindow osztály...10 Az eseménykezelés lépései...10 Egy QAction részletesen - File/New...11 A filenew tevékenység (QAction) deklarációja...11 A filenew tevékenység (QAction) objektum létrehozása és inicializálása (initaction())...11 A filenew tevékenység (QAction) elhelyezése a menüsorban (initmenubar())...12 A filenew tevékenység (QAction) beillesztése az eszköztárba (inittoolbar())...12 A filenew slot definíciója ( slotfilenew() )...12 Az Invoicer osztály...13 Inicializáló műveletek...13 Slotok...13 Adattagok...13 Az Invoicer osztály definíciója...14 Az Invoicer osztály implementációja...15 Tevékenység létrehozása/inicializálása...16 Menüpontok létrehozása és inicializálása...17 Invoicer::initMenuBar()...17 Eszköztár létrehozása és inicializálása...17 Invoicer::initToolBar()...17 Státuszsor inicializálása...18 Invoicer::initStatusBar()...18 Az alkalmazás dokumentum létrehozása és inicializálása...18 Invoicer::initDoc()...18 Az alkalmazás nézet (central widget) létrehozása és inicializálása...18 Invoicer::initView()...18 Kilépés kérdezéssel...18 Invoicer::queryExit()...18 Az Invoicer osztály slotjainak implementációja (vázlat)...19 Invoicer::slotFileNew()...19 Invoicer::slotFileOpen()...19 Invoicer::slotFileSave()...19 Invoicer::slotFileSaveAs()...19 Invoicer::slotFileQuit() oldal
2 Invoicer::slotViewToolBar(bool toggle)...20 Invoicer::slotViewStatusBar(bool toggle)...20 Invoicer::slotHelpAbout()...20 Az alkalmazás főprogramja...21 main.cpp...21 Fordítás/Futtatás...21 Projekt összeállítása Qt parancsokkal...22 A projektet alkotó összetevők forrása letölthető a people.inf.elte.hu/nacsa honlapról. 2. oldal
3 ! #" $ #" %& (')+*,$ -#*.'0/213-+* ;:(4=<>@? Az SDI alkalmazások készítése Qt-ben I, II, III-ban arra mutatunk példát, hogyan készíthetünk a Qt osztályait felhasználva korszerű, menüvezérelt, ablakos alkalmazást. A projektet alkotó összetevők forrása letölthető a people.inf.elte.hu/nacsa címről. ACBEDFGHFJI Készítsünk egy olyan alkalmazást, amely alkalmas számlák (invoice) rögzítésére, karbantartására. Egy számla fejlécből (header) és számlatételek (items) sorozatából áll. A számla fejléce a következő adatokat tartalmazza: várárló neve (customer), vásárló címe: irányítószám (zip), helység (city), utca (street), számla sorszáma (invno), kiállítás dátuma (released), teljesítés dátuma (fulfilled), fizetési határidő (dueto). Egy számlatétel az alábbi összetevőkből áll: megnevezés (name), mennyiségi egység (unit), egységár (unitprice), mennyiség (quantity), nettó ár (netprice=unitprice*quantity), áfakulcs (vatpercent), áfa összege (vat=netprice*vat/1), bruttó ár (grossprice=netprice+vat) A program tegye lehetővé a fenti adatok felvitelét, módosítását, a számlák fájlba történő mentését és azok visszaolvasását. Ebben a munkafüzetben az ismeretek alapos elsajátítása érdekében - a projektet alkotó elemeket kézzel illesztjük be a projektbe, és kézi programozással adjuk meg a forrásprogramok kódját is. KMLON PRQSBUTHIHPWVYXYI[Z\D^]HGH_`FEaON2Fb!QF Projektünket az ún, dokument/view architektúra szerint készítjük el, melyben külön osztály felel az adatokért (doc), és külön osztály az adatok megjelenítéséért (view). A QObject osztályból származtatott InvoicerDoc osztály feladata a számla adatok kezelése. A megjelenítéséért a Qt Designerrel megtervezett InvoicerViewBase osztályból származtatott InvoicerView osztály felel. Az alkalmazás főablakát a QMainWindow osztályból származtatjuk. A QMainWindow osztály az ablakos alkalmazásoknál megszokott, menüvel, státuszsorral, stb. ellátott keretablakot valósítja meg. 3. oldal
4 cmdoe frgshuihjlkmfjnpowq`rysuhuithesuhtjuh main.cpp invoicer.h invoicerdoc.h invoicerdoc.cpp invoicerview.h invoicerview.cpp A főprogram Az alkalmazás főablakát megvalósító Invoicer osztály Az alkalmazás dokumentumtípusát (számla) megvalósító InvoicerDoc osztály Az alkalmazás főablakának belsejét (a számla megjelenítését) megvalósító InvoicerView osztály. Az InvoicerView osztályt az InvoicerViewBase osztályból fogjuk előállítani származtatással. Az InvoicerViewBase osztályt a Qt Designerrel tervezzük meg, majd a segítségével elkészített invoicerviewbase.ui fájlt beillesztjük a projektünkbe. 4. oldal
5 vxw!yoz w~ W ƒ uz pt ˆ \ \Š Hozzunk létre egy üres KDevelop/Qt/C++ projektet 1. Ha az Ön által használt fejlesztőeszközben nincs ilyen lehetőség, akkor készítsen el egy tetszőleges, Qt alapú projektet, és törölje a projekt.h és.cpp fájljait. Ezzel elkészül egy olyan projekt környezet, amelybe már beilleszthetjük a saját forrásainkat. (A munkafüzet végén talál egy másik technikát az alkalmazás projekt összeállítására.) Y ˆ Œ ŠŽŒ ; u\z E UƒU t A főablak tartalmát elkészítése. Qt Designer segítségével készítjük el. A cél az alábbi formanyomtatvány (widget) Készítse el a fenti formanyomtatványt, majd mentse el invoicerviewbase.ui néven a projekt könyvtárába. Az alábbi táblázatban felsoroltuk a formanyomtatványon szereplő vezérlőelemeket és azok beállításait. (properities) 1 KDevelop2: Project/New/Qt/Qt SDI/(Project name: Invoicer) /Create KDevelop3: Project/New/C++/Qt Application/Create 5. oldal
6 Vezérlőelemek és paraméterezésük Customer blokk Vezérlő azonosító Class Properties Megjegyzés TextLabel* QLabel Text: Name:, Buddy: customer Buddy: A Name cimke és a customer szerkesztőmező összerendelése. TextLabel* QLabel Text: Zip:, Buddy: zip TextLabel* QLabel Text: Locality:, Buddy: city TextLabel* QLabel Text: Street:, Buddy: street customer zip city street Invoice blokk QLineEdit QLineEdit QLineEdit QLineEdit Vezérlő azonosító Class Properties Megjegyzés TextLabel* QLabel Text: No:, Buddy: invno TextLabel* QLabel Text: Released:, Buddy: released TextLabel* QLabel Text: Fulfilled:, Buddy: fulfilled TextLabel* QLabel Text: Due to:, Buddy: dueto invno released fulfilled dueto Items blokk QLineEdit QLineEdit QLineEdit QLineEdit items QListView Column:Name/Unit/Qty/Unit Price/Net Price/VAT%/VAT/Price Grandtotal blokk TextLabel* QLabel Text: Grandtotal:, Buddy: sum sum QLineEdit A vezérlőelemre duplát kattintva szerkesztheti a listát. * : A *-gal megjelölt feliratoknál nem kötelező egyedi azonosítót megadni. A Qt Designerrel létrehozott.ui fájlt mentse el a projekt könyvtárába invoicerviewbase.ui néven, majd adja hozzá a fájlt a projekthez: Add Existing File.../invoicer/invoicerviewbase.ui 6. oldal
7 A projekt összeállításakor az invoicerviewbase.ui fájlból az uic (user interface compiler) elkészíti az InvoicerViewBase osztály forráskódját, melyet az invoicerviewbase.h és az invoicerviewbase.cpp fájlokban helyez el. Nekünk csak az invoicerviewbase.ui fájlt kell beilleszteni a projektbe, a forráskódot tartalmazó fájlokat nem. + # [ šh œ\žyÿ š œ šw Y Y [ Y A Document/View architectura szerint az InvoicerDoc osztály felelősége az alkalmazás adatainak kezelése. Az InvoicerDoc osztály definíciója class InvoicerDoc : public QObject Q_OBJECT public: InvoicerDoc(); ~InvoicerDoc(); void newdoc(); bool save(); bool saveas(const QString &filename); bool load(const QString &filename); bool ismodified() const; signals: void documentchanged(); protected: bool modified; ; invoicerdoc.h A függvények pontos (részletes) működését a III. munkafüzet tartalmazza. Ha megváltozott a dokumentum, jelezzük. Ebben az adattagban tároljuk, hogy változtak-e az adatok. A dokumentum osztályban a modified flag tárolja, megváltozott-e a dokumentum. Adataink megváltozásáról a documentchanged() signál tájékoztatja a külvilágot, lehetővé téve, hogy az abban érdekelt objektumok rákapcsolódhassanak erre a signálra. Így az alkalmazás bezárásakor a nézet osztály figyelmeztetheti a felhasználót, ha megváltoztak az adatok, és azokat még nem mentette el. Az InvoicerDoc osztály implementációja #include "invoicerdoc.h" InvoicerDoc::InvoicerDoc() modified = false; InvoicerDoc::~InvoicerDoc() invoicerdoc.cpp A függvényeket részletesen később adjuk meg. A destruktor üres, hiszen a dokumentum osztály az Invoicer osztály gyereke, így az azzal együtt megszűnik. 7. oldal
8 void InvoicerDoc::newDoc() //TODO Új dokumentum létrehozása ك.ك ل مكى ى A függvényeket részletesen később adjuk meg. bool InvoicerDoc::save() //TODO Dokumentum elmentése return true; bool InvoicerDoc::saveAs(const QString & /*filename*/) //TODO Dokumentum elmentése más néven return true; bool InvoicerDoc::load(const QString & /*filename*/) //TODO Új dokumentum betöltése emit documentchanged(); return true; bool InvoicerDoc::isModified() const return modified; A load() a fájl betöltésekor szignált küld a dokumentum megváltozásáról. A modified adattagban tároljuk, változtak-e az adataink. 0ªW«W W t«e±u«e² Uª ³ µt [ ¹H m¹wªy±y º\²`²»\² A grafikus alkalmazások általában lehetővé teszik a felhasználó számára, hogy több helyről is kezdeményezhessen egy-egy tevékenységet. Például a fájl mentése tevékenység kezdeményezhető menüből, eszköztárról (toolbar), vagy gyorsbillentyű (accelerator) alkalmazásával is. A QAction osztály a felhasználói felületről kezdeményezhető tevékenységek kezelésére szolgáló osztály. A QAction osztályt alkalmazva a kívánt tevékenységet (action) egyetlen egyszer kell létrehozni, melyet azután az alkalmazásunk különböző helyéről aktivizálhatunk. Aktivizálhatjuk menüből, eszköztárból ill. rendelhetünk hozzá gyorsmenüt. A QAction osztály alkalmazásával a különböző helyről aktivizálható események öszzhangban lesznek egymással. Egy QAction objektumban elhelyezhetünk ikont, menü szöveget, státusz szöveget, what is this szöveget és súgó szöveget (tooltip). Ezeket az adatokat megadhatjuk az esemény létrehozásakor a konstruktorban, vagy futás közben is. Egy QAction lehet állapotváltó esemény (toggle action) pl. Bold toolbar eszközgomb-, vagy parancs (command action) típusú esemény pl. File open menüpont -. A QAction típusú objektum az esemény végrehajtásakor activated() szignált küld. A toggle action típusú QAction objektumok állapotváltáskor egy toggled() szignált is küldenek. 8. oldal
9 ¼+½#¾[ À ÁH Ã\ÄYÅ3ÆtÂ Ä ÇÈÁHÉ ½YÊ[Ë\Ì^Í Az osztály felelősége az alkalmazás felhasználói felületének (nézet) kezelése. Az InvoicerViewBase osztályból származtatással hozzunk létre egy új osztályt InvoicerView néven. Az InvoicerView osztály definíciója #include "invoicerviewbase.h" #include "invoicerdoc.h" invoicerview.h class InvoicerView : public InvoicerViewBase Q_OBJECT public: InvoicerView(QWidget *parent=0, InvoicerDoc* doc=0); ~InvoicerView(); protected slots: void slotdocumentchanged(); ; Az InvoicerView osztály az InvoicerViewBase osztály leszármazottja. A konstruktoron és a destruktoron kívül egyetlen publikus slotot tartalmaz (slotdocumentchanged()), amelyet majd akkor hajtunk végre, ha valamilyen változás történt az adatainkban. Az InvoicerView osztály implementációja #include "invoicerview.h" InvoicerView::InvoicerView(QWidget *parent, InvoicerDoc *doc) : InvoicerViewBase(parent) connect(doc, SIGNAL(documentChanged()), this, SLOT(slotDocumentChanged())); invoicerview.cpp Összekötjük a dokumentum osztály adatainak megváltozását jelző signált a megjelenítésért felelős nézetosztály slotjával. InvoicerView::~InvoicerView() void InvoicerView::slotDocumentChanged() //TODO update the view A slot feladata a nézet megjelenítése/frissítése. A konstruktor implementációjában összekapcsoljuk a dokumentum documentchanged() signálját az InvoicerView osztály aktuális példányának slotdocumentchanged() slotjával. A destruktorban nincs tennivalónk, hiszen terveink szerint ezen osztály egyetlen példánya lesz az alkalmazásunk főablaka, amely az alkalmazás bezárásakor automatikusan megszűnik. 9. oldal
10 ÎCÏWÐÑJÒ`ÐÓtÔpÕ Ö Ð\ØÙ ÚlØÙpÛCÜ ÝÈÜHÞ ßYà[á\Ò^â A QMainWindow osztály az alkalmazás felhasználói felületéül szolgáló keret ( főablak ), melynek felépítése a következő: Az ábrán megadott függvények segítségével megkapjuk a QMainWindow egyes részeire mutató pointert. E pointerek segítségével helyezhetjük el az ablak alkalmazásspecifikus elemeit. Például a menüsor File menüpontját az alábbi függvénnyel tehetjük rá az ablakra: menubar()->insertitem(tr("&file"), filemenu); ã+ä åuæwåuçmè éwêwëåeäuåuì èuæ ì è;íoèuætåuî Megjegyzés Létrehozunk egy tevékenység objektumot (QAction). Beállítjuk a tevékenység alkalmazásspecifikus adatait (menü szövege, státusz sor szövege, stb.) Létrehozzuk a menüpontot, és elhelyezzük azt az alkalmazás főablakában. Tevékenységet rendelünk a menüponthoz. Összekötjük a tevékenységet az őt kezelő slottal. Megadjuk a slot implementációját. A QAction osztállyal a felhasználó által kezdeményezhető eseményeket kezelhetjük (menüből, eszközgombbal, gyorsbillentyűvel aktivizálható események). Ezeket az eseményeket nevezzük a továbbiakban tevékenységeknek, megkülönböztetve a QEvent osztállyal megadott eseményektől, illetve a felhasználói eseményektől (custom event). 10. oldal
11 ï ðòñôóõ ötø[ù úhûmü ýeþyÿ tø Uþ û Ẅù Ahhoz, hogy jobban megértsük a QAction működését, nézzük meg közelebbről a File/New menüponthoz rendelt filenew eseményt. A filenew tevékenység (QAction) deklarációja class Invoicer : public QMainWindow Q_OBJECT public: invoicer.h void initactions(); void initmenubar(); void inittoolbar(); public slots: void slotfilenew(); A File/New parancsot kezelő slot. private: InvoicerView *view; InvoicerDoc *doc; QPopupMenu *filemenu; QAction *filenew; A File menüpont deklarációja. A filenew tevékenység deklarációja ; A filenew tevékenység (QAction) objektum létrehozása és inicializálása (initaction()) void Invoicer::initActions() filenew = new QAction(tr("&New"), tr("ctrl+n"), this); filenew->seticonset(qpixmap::frommimesource("new.png")); filenew->setstatustip(tr("creates a new document")); filenew->setwhatsthis(tr("new File\n\nCreates a new document")); connect(filenew, SIGNAL(activated()), this, SLOT(slotFileNew()));... A QAction első paramétere a menü szövege, a második paramétere a gyorsbillentyű. A harmadik paraméter this értéke azt jelzi, hogy a tevékenység objektum az őt létrehozó objektum gyereke. Qt-ben a képek kezelése többféleképpen történhet. Betölthetjük a képet futási időben, beilleszthetjük a forráskódba XPM fájlként, vagy használhatjuk a Qt image collection mechanizmusát. Mi a harmadik lehetőséget választjuk, ezért a projektbe be kell illesztenünk a projektben használt kép fájlokat. A seticonset() függvénnyel állítjuk be a tevékenységhez tartozó ikont. A setstatustip() függvénnyel megadjuk a státusz sorban megjelenítendő szöveget, a setwhatsthis() függvénnyel a What is this eszközgombhoz rendelt rövid ismertető szövegét. A connect metanyelvi paranccsal öszekötjük az esemény aktivizálását jelző signált és az őt kezelő slotot. 11. oldal
12 A filenew tevékenység (QAction) elhelyezése a menüsorban (initmenubar()) void Invoicer::initMenuBar() // menubar entry filemenu filemenu=new QPopupMenu(); filenew->addto(filemenu); fileopen->addto(filemenu); filemenu->insertseparator(); filesave->addto(filemenu); filesaveas->addto(filemenu); filemenu->insertseparator(); filequit->addto(filemenu); // menubar entry viewmenu viewmenu=new QPopupMenu(); viewmenu->setcheckable(true); viewtoolbar->addto(viewmenu); viewstatusbar->addto(viewmenu); // menubar entry helpmenu helpmenu=new QPopupMenu(); helpaboutapp->addto(helpmenu); // MENUBAR CONFIGURATION menubar()->insertitem(tr("&file"), filemenu); menubar()->insertitem(tr("&view"), viewmenu); menubar()->insertseparator(); menubar()->insertitem(tr("&help"), helpmenu); A filenew tevékenység (QAction) beillesztése az eszköztárba (inittoolbar()) void Invoicer::initToolBar() // TOOLBAR filetoolbar = new QToolBar(this, "File operations"); filenew->addto(filetoolbar); fileopen->addto(filetoolbar); filesave->addto(filetoolbar); filetoolbar->addseparator(); QWhatsThis::whatsThisButton(fileToolbar); A filenew slot definíciója ( slotfilenew() ) void Invoicer::slotFileNew() statusbar()->message(tr("creating new file...")); doc->newdoc(); statusbar()->message(tr("ready.")); 12. oldal
13 "!$#%'&$$()"*,+ Alkalmazásunk menüpontjai: File: New, Open, Save, SaveAs, Quit View: ToolBar, StatusBar Help: About A menüpontoknak megfelelően az alkalmazásunk főablakául szolgáló Invoicer osztályban az alábbi függvényeket és adatokat definiáljuk. Inicializáló műveletek initaction() initmenubar() inittoolbar() initstatusbar() initdoc() initview() Az alkalmazásban elérhető tevékenységeket reprezentáló QAction objektumok létrehozása Menürendszer felépítése Az eszköztár felépítése A sátuszsor inicializálása Kezdeti dokumentum (InvoicerDoc) létrehozása és inicializálása A nézet (InvoicerView) objektum létrehozása és inicializálása Slotok slotfilenew() slotfileopen() slotfilesave() slotfilesaveas() slotfilequit() slotviewtoolbar() slotviewstatusbar() slothelpabout() Új dokumentum létrehozása Dokumentum olvasása fájlból Dokumentum mentése fájlba Dokumentum mentése fájlba más néven Kilépés Az eszköztár megjelenítése/elrejtése A státuszsor megjelenítése/elrejtése Az About ablak megjelenítése Adattagok doc view menü objektumok tevékenységek Az aktuális dokumentum (InvoicerDoc) objektumra mutató pointer Az aktuális (és egyetlen) nézet (InvoicerView) objektumra mutató pointer QPopupMenu, QToolBar QAction 13. oldal
14 Az Invoicer osztály definíciója #include <qmainwindow.h> #include "invoicerview.h" class QAction; class Invoicer : public QMainWindow Q_OBJECT public: Invoicer(QWidget *parent = 0, const char *name = 0); private: /** initializes all QActions of the application */ void initactions(); void initmenubar(); void inittoolbar(); void initstatusbar(); void initdoc(); void initview(); bool queryexit(); private slots: void slotfilenew(); void slotfileopen(); void slotfilesave(); void slotfilesaveas(); void slotfilequit(); void slotviewtoolbar(bool toggle); void slotviewstatusbar(bool toggle); void slothelpabout(); private: InvoicerView *view; InvoicerDoc *doc; QPopupMenu *filemenu; QPopupMenu *viewmenu; QPopupMenu *helpmenu; QToolBar *filetoolbar; QAction *filenew; QAction *fileopen; QAction *filesave; QAction *filesaveas; QAction *filequit; QAction *viewtoolbar; QAction *viewstatusbar; QAction *helpaboutapp; ; invoicer.h Az Invoicer osztályt a QMainWindow osztályból származtatva hozzuk létre. Tevékenység objektumok létrehozását és inicializálásaát végző segédfüggvények Kilépésnél, rékérdezünk, biztos-e a dolgában. Deklaráljuk a tevékenység- (esemény-) kezelő slotokat, Deklarálunk egy nézetosztályt és egy dokumentum osztályt. (Doc/View architektura). Megadjuk a menüpontokat és egy eszköztárat. Deklaráljuk azokat az eseményeket (tevékenységeket), amelyeket a felhasználó aktivizálhat az alkalmazás futásakor. Az Invoicer osztály implementációja 14. oldal
15 #include <qapplication.h> #include <qaction.h> #include <qmenubar.h> #include <qpopupmenu.h> #include <qtoolbar.h> #include <qstatusbar.h> #include <qwhatsthis.h> #include <qstring.h> #include <qpixmap.h> #include <qmsgbox.h> #include <qfiledialog.h> #include <qaccel.h> #include "invoicer.h" Invoicer::Invoicer(QWidget *parent, const char *name) :QMainWindow(parent,name) setcaption(tr("invoicer Version 1.0 ")); // call inits to invoke all other construction parts initactions(); initmenubar(); inittoolbar(); initstatusbar(); initdoc(); initview(); viewtoolbar->seton(true); viewstatusbar->seton(true); A programban használt Qt elemek definíciója. Az Invoicer osztályt a QMainWindow osztályból származtatjuk. Ez lesz az ablak cimkesorában. Létrehozzuk és inicializáljuk az ablak egyes részeit. Inicializáljuk a doumentumot és a nézetet. Az eszköztár és a státuszsor jelenjen meg az ablakon. A konstruktorban létrehozzuk a szükséges widgeteket, inicializáljuk az adatokat kezelő dokumentum osztályt, valamint a nézet osztályt. A felhasználói felületen megjelenített szöveget azért foglaljuk be a tr() függvénybe, mert így a későbbiekben könnyen megvalósíthatjuk, hogy alkalmazásunk többféle nyelvi környezetben is futhasson. - Saját jegyzet 15. oldal
16 ."/'021435/46'7 8'1:9<; 1 = >?/A@CB D E$8"FGHI6H JAHF$;IHKD E";E"8$F void Invoicer::initActions() filenew = new QAction(tr("&New"), tr("ctrl+n"), this); filenew->seticonset(qpixmap::frommimesource("new.png")); filenew->setstatustip(tr("creates a new document")); filenew->setwhatsthis(tr("new File\n\nCreates a new document")); connect(filenew, SIGNAL(activated()), this, SLOT(slotFileNew())); fileopen = new QAction(tr("&Open..."), tr("ctrl+n"), this); fileopen->seticonset(qpixmap::frommimesource("open.png")); fileopen->setstatustip(tr("opens an existing document")); fileopen->setwhatsthis(tr("open File\n\nOpens an existing document")); connect(fileopen, SIGNAL(activated()), this, SLOT(slotFileOpen())); filesave = new QAction(tr("&Save"),tr("Ctrl+S"),this); filesave->seticonset(qpixmap::frommimesource("save.png")); filesave->setstatustip(tr("saves the actual document")); filesave->setwhatsthis(tr("save File.\n\nSaves the actual document")); connect(filesave, SIGNAL(activated()), this, SLOT(slotFileSave())); filesaveas = new QAction(tr("Save &as..."),0,this); filesaveas->setstatustip( tr("saves the actual document under a new filename")); filesaveas->setwhatsthis( tr("save As\n\nSaves the actual document under a new filename")); connect(filesaveas, SIGNAL(activated()), this, SLOT(slotFileSave())); filequit = new QAction(tr("E&xit"), tr("ctrl+q"), this); filequit->setstatustip(tr("quits the application")); filequit->setwhatsthis(tr("exit\n\nquits the application")); connect(filequit, SIGNAL(activated()), this, SLOT(slotFileQuit())); viewtoolbar = new QAction(tr("Tool&bar"), 0, this); viewtoolbar->settoggleaction(true); viewtoolbar->setstatustip(tr("enables/disables the toolbar")); viewtoolbar->setwhatsthis(tr("toolbar\n\nenables/disables the toolbar")); connect(viewtoolbar, SIGNAL(toggled(bool)), this, SLOT(slotViewToolBar(bool))); viewstatusbar = new QAction(tr("&Statusbar"), 0, this); viewstatusbar->settoggleaction(true); viewstatusbar->setstatustip(tr("enables/disables the statusbar")); viewstatusbar->setwhatsthis( tr("statusbar\n\nenables/disables the statusbar")); connect(viewstatusbar, SIGNAL(toggled(bool)), this, SLOT(slotViewStatusBar(bool))); helpaboutapp = new QAction(tr("&About..."), 0, this); helpaboutapp->setstatustip(tr("about the application")); helpaboutapp->setwhatsthis(tr("about\n\nabout the application")); connect(helpaboutapp, SIGNAL(activated()), this, SLOT(slotHelpAbout())); 16. oldal
17 d LNM4OQP$RTSOVU SWYXZ5U [?M4\QS ] ^"_"àz2_nbiob cab`"xbk] ^"X^"_$` A tevékenységek meghatározása után létrehozzuk az alkalmazás menüpontjait és eszköztárait, majd hozzárendeljük a menüpontokat ill. eszközgombokat a tevékenységekhez. e f$gihkj2l5monnhke5hqpsrtl"e5uvqw myx z void Invoicer::initMenuBar() // menubar entry filemenu filemenu=new QPopupMenu(); filenew->addto(filemenu); fileopen->addto(filemenu); filemenu->insertseparator(); filesave->addto(filemenu); filesaveas->addto(filemenu); filemenu->insertseparator(); filequit->addto(filemenu); // menubar entry viewmenu viewmenu=new QPopupMenu(); viewmenu->setcheckable(true); viewtoolbar->addto(viewmenu); viewstatusbar->addto(viewmenu); // menubar entry helpmenu helpmenu=new QPopupMenu(); helpaboutapp->addto(helpmenu); // MENUBAR CONFIGURATION menubar()->insertitem(tr("&file"), filemenu); menubar()->insertitem(tr("&view"), viewmenu); menubar()->insertseparator(); menubar()->insertitem(tr("&help"), helpmenu); V $~ $ ' Vƒ? 4 Q " "â 2 N Ši A ˆ"ƒ K "ƒ " "ˆ Œ Ž$ i k 2 5 o K 5 q ' i C 5 yš void Invoicer::initToolBar() // TOOLBAR filetoolbar = new QToolBar(this, "file operations"); filenew->addto(filetoolbar); fileopen->addto(filetoolbar); filesave->addto(filetoolbar); filetoolbar->addseparator(); QWhatsThis::whatsThisButton(fileToolbar); 17. oldal
18 œž Ÿi ' $ ' V I i A " Ÿ$ IŸ$ " ª«$ i k 2 5±o²² K«5 q³µ ³ 2³ 5¹$ºQ ±y»¼ void Invoicer::initStatusBar() //STATUSBAR statusbar()->message(tr("ready."), 2000); ½¾ "ÀIÁ$ "ÀI 4¾ Ã"ÄÆÅÈÇÁ É Ê4ËVÌ É ÒÓ Ô$ÕiÖk 2Ø5ÙoÚÚÖKÓ5ÖqÛsÜCÕ ÝÞ À Í Ì Î?Ê4ÏQÇ ¾ Ã"Ä$ aíaänðiëiðñ2ði $ÀIÐK¾ Ã"ÀÃ"Ä$ void Invoicer::initDoc() doc=new InvoicerDoc(); Részletesen később. ßàá"âIã$á"âIä á4à å"æèçqé2àaê ëiìyí"êaçvë îsá"âqïñðò"ó%ê ëkôõâé5ë î?ê4öq à å"æ$áaéaænðiçð í2ðiá$âiðkà å"âå"æ$á øù ú$ûiüký2þ5ÿ ükù5ü Tükþ void Invoicer::initView() // set the main widget here view=new InvoicerView(this, doc); setcentralwidget(view); Részletesen később.!"$#&%('*) +-,..0/21&+-, 324-5'*687 9 bool Invoicer::queryExit() int exit=qmessagebox::information(this, tr("quit..."), tr("do your really want to quit?"), QMessageBox::Ok, QMessageBox::Cancel); if (exit==qmessagebox::ok) return true; else return false; Az alkalmazás bezárásakor rákérdezünk, biztosan befejezte-e a munkát. Részletesen később. 18. oldal
19 C2D CPJ QSRDT?URVWDTXOYZL D ]^QSR`_aAbK\;$LTR2J*c Ebben a fejezetben megadjuk az alkalmazás által kezelt slotok minimális vázát. Ahogy haladunk előre a feladat megoldásában, úgy fogjuk kibővíteni az egyes slotok funkcióit. de$f&g(h*i j-k l ltm nogprqhnn*j-stj uwv x void Invoicer::slotFileNew() statusbar()->message(tr("creating new file...")); doc->newdoc(); statusbar()->message(tr("ready.")); yz$& (*~ - T ƒo r Nƒ* ˆ z\ Š void Invoicer::slotFileOpen() 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); Részletesen később. Œ$ &Ž( * - T ož r N * Ũ $ & š void Invoicer::slotFileSave() statusbar()->message(tr("saving file...")); doc->save(); statusbar()->message(tr("ready.")); œ $ž&ÿ( * - T oÿ r N * Uª$ž& «b void Invoicer::slotFileSaveAs() statusbar()->message(tr("saving file under new filename...")); QString fn = QFileDialog::getSaveFileName(0, 0, this); if (!fn.isempty()) doc->saveas(fn); else statusbar()->message(tr("saving aborted"), 2000); statusbar()->message(tr("ready.")); Részletesen később. Részletesen később. 19. oldal
20 $±&²(³* µ- T ¹o²ºr»³N¹*µ ¼¾½-³*º8 À void Invoicer::slotFileQuit() statusbar()->message(tr("exiting application...")); // exits the Application if(doc->ismodified()) if(queryexit()) qapp->quit(); else qapp->quit(); ; statusbar()->message(tr("ready.")); ÁÂ$Ã&Ä(Å*Æ Ç-È É ÉTÊ ËoÄÌ ÍÎÅ*Ç ÏÑÐ2Ä-Ä(ËÒtÓÈ8ÔÖÕ\ÄÄ2ËÌ8Ä (Ë*Ç Ø void Invoicer::slotViewToolBar(bool toggle) statusbar()->message(tr("toggle toolbar...")); if (toggle== false) filetoolbar->hide(); else filetoolbar->show(); statusbar()->message(tr("ready.")); ÙÚ$Û&Ü(Ý*Þ ß-à á átâ ãoüä åîý*ß æèçuä é äöêâ&ëté-àíìöî\ü-ü(ãä8üïï(ã*ß ð void Invoicer::slotViewStatusBar(bool toggle) statusbar()->message(tr("toggle statusbar...")); if (toggle == false) statusbar()->hide(); else statusbar()->show(); statusbar()->message(tr("ready.")); ñò$ó&ô(õ*ö -ø ù ùtú ûoôürýt &û0þ$ÿ ô \ü void Invoicer::slotHelpAbout() QMessageBox::about(this,tr("About..."), trutf8("invoicer\nversion 1.0 \n(c) 2004 by Szabóné Rozália") ); Nacsa A trutf8 függvény jól konvertálja az ékezetes karaktereket is. 20. oldal
21 =!#"%$'&(" Végül készítsük el alkalmazásunk főprogramját. main.cpp #include <qapplication.h> main.cpp #include "invoicer.h" int main(int argc, char *argv[]) QApplication app(argc, argv); Invoicer *invoicer=new Invoicer(); app.setmainwidget(invoicer); invoicer->show(); return app.exec(); A főprogramban létrehozzuk a QApplication típusú app objektumot. (Ilyen objektumból csak egy lehet minden alkalmazásban!). Mivel a Qt alkalmazás is képes parancssori paraméterek kezelésére, ezért átadjuk neki a main függvény argumentumait. A szabad tárterületen (heap) létrehozzuk az alkalmazásunk főablakának egy példányát (invoicer), az alkalmazásunknak jelezzük, hogy ez lesz a főablak, majd megjelenítjük a főablakot. A főablak bezárásakor minden, a főablakban létrehozott objektum törlődik, ezért itt nem szükséges a new mellett a delete használata. Ezután futtatjuk (exec) az alkalmazást. Az alkalmazás futása azt jelenti, hogy fut egy üzenetkezelő ciklus, amely várakozik a neki szóló események bekövetkezésére. (A többnyelvű alkalmazás készítését később mutatjuk meg.) )+*-,/ )-9:1;14< 1435 Ha lefordítjuk és összeszerkesztjük a projektet, majd futtatjuk azt, akkor a főabklakban megjelenik a számla. Ezen a ponton kisérletezhetünk az egyes vezérlőelemek viselkedésével. Figyelje meg a státusz sorban megjelenő szövegeket. Nézze meg mi történik, ha a File/Open parancsot adja ki. Természetesen ezzel még nem készült el a teljes alkalmazás. A feladat további részét az SDI alkalmazás készítése Qt-ben II, III munkafüzetekben mutatjuk meg. Saját jegyzet 21. oldal
22 >? 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: main.cpp, invoicer.h,, invoicerdoc.h, invoicerdoc.cpp, invoicerview.h, invoicerview.cpp, 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.06c) Sun Mar 21 17:41: ###################################################################### TEMPLATE = app INCLUDEPATH +=. # Input HEADERS += invoicer.h invoicerdoc.h invoicerview.h INTERFACES += invoicerviewbase.ui SOURCES += invoicerdoc.cpp invoicerview.cpp main.cpp IMAGES = images/new.png\ images/open.png\ images/save.png 7. Hozza létre a platform függő make fájlt: qmake invoicer.pro 8. Fordítsa/Szerkessze a programot: make 9. Futtassa a programot:./invoicer A projektet alkotó összetevők forrása letölthető a people.inf.elte.hu/nacsa honlapról. 22. oldal
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
RészletesebbenElemi 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
RészletesebbenC++/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
RészletesebbenELTE 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
RészletesebbenAlkalmazá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
RészletesebbenElemi 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
RészletesebbenElemi alkalmazások fejlesztése IV. Adatbáziskezelő alkalmazás készítése C++/Qt ben I.
Tartalomjegyzék Adatbáziskezelő alkalmazás készítése C++/Qt ben I...3 A MySQL adatbáziskezelő használatba vétele...3 Az alkalmazás adatbázisa...4 A Qt/Sql modul...5 Az adatbázis és az alkalmazás összekapcsolása...5
RészletesebbenAlkalmazá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
RészletesebbenElemi 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
RészletesebbenElemi 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
RészletesebbenElemi 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...
RészletesebbenElemi 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
RészletesebbenElemi 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
RészletesebbenBudapest, 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
RészletesebbenMySql 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
RészletesebbenElemi 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ó
RészletesebbenElemi 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
RészletesebbenEgysé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
RészletesebbenAlkalmazá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
RészletesebbenElemi 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
RészletesebbenAlkalmazá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ő
Részletesebben3D-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
RészletesebbenTervezőeszközök, fejlesztőeszközök használata Qt alapú alkalmazásoknál. Saját vezérlő használata tervezőben (worldclocks)
Tartalomjegyzék Tervezőeszközök, fejlesztőeszközök használata Qt alapú alkalmazásoknál...1 Saját vezérlő használata tervezőben (worldclocks)...1 DigitalClock osztály (módosítás)...2 MyForm osztály...3
Részletesebben3. 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
RészletesebbenElemi alkalmazások fejlesztése III
Elemi alkalmazások fejlesztése III Egyablakos alkalmazás készítése I. Qt/X11 felhasználásával Kdevelop környezetben készítette: Steingart Ferenc Szabóné Nacsa Rozália Ajánlott irodalom Qt dokumentáció
RészletesebbenElemi 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
RészletesebbenElemi 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
RészletesebbenQLabel *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();
RészletesebbenGrafikus 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
RészletesebbenAdatbázis-kezelés ODBC driverrel
ADATBÁZIS-KEZELÉS ODBC DRIVERREL... 1 ODBC: OPEN DATABASE CONNECTIVITY (NYÍLT ADATBÁZIS KAPCSOLÁS)... 1 AZ ODBC FELÉPÍTÉSE... 2 ADATBÁZIS REGISZTRÁCIÓ... 2 PROJEKT LÉTREHOZÁSA... 3 A GENERÁLT PROJEKT FELÉPÍTÉSE...
RészletesebbenVizuális és eseményvezérelt programozás , II. félév BMF NIK
Vizuális és eseményvezérelt programozás 2006 2007, II. félév BMF NIK MDI szövegszerkesztő Az SDI és az MDI Szülő- és gyermekablakok Menürendszer MDI alkalmazáshoz A gyermekablakok elrendezése RichTextBox
Részletesebben3D-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
RészletesebbenEseményvezérelt alkalmazások
Szabóné Nacsa Rozália nacsa@inf.elte.hu Eseményvezérelt alkalmazások A Windows alkalmazások eseményvezérelt alkalmazások Esemény: egér kattintás billenty leütés stb. Üzenetkezelés Operációs rendszer kódja
RészletesebbenStatikus 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
RészletesebbenSDI 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
RészletesebbenElemi 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
RészletesebbenElemi alkalmazások fejlesztése IV. Adatbáziskezel alkalmazás készítése QtDesignerben. Készítette: Szabóné Nacsa Rozália
Elemi alkalmazások fejlesztése IV. Adatbáziskezel ő alkalmazás készítése QtDesignerben Készítette: Szabóné Nacsa Rozália 1 Származtatásos modulszerkezet Q t form.ui U formbase.h Örökl ő dés form.h formbase.cpp
RészletesebbenA slotfilequit() módosítása...18 Ami még hátra van...18 Projekt összeállítása Qt parancsokkal...19
...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
RészletesebbenSzoftvertechnolo 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
RészletesebbenSzabóné Nacsa Rozália. Feladat. Készítsünk el egy üres FormView alapú alkalmazást és építsünk köré egy súgó környezetet.
Szabóné Nacsa Rozália Feladat Készítsünk el egy üres FormView alapú alkalmazást és építsünk köré egy súgó környezetet. 1 Tartalom Tárgymutató 2 Keresés Menüpontok 3 HTML oldalak HTML oldalak felsorolása
RészletesebbenProgramozási technológia
Programozási technológia Swing GUI készítése NetBeans IDE segítségével Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Bevezető Eddig a grafikus felhasználói felületet kódból hoztuk létre kézzel. A mi
RészletesebbenElemi alkalmazások fejlesztése I.
Steingart Ferenc el adása alapján készítette: Szabóné Nacsa Rozália Integrált fejleszt környezet Linux MS Win* www.kdevelop.org www.bloodshed.net Bevezetés 1 A kdevelop f ablaka Editor és böngész Projektszerkezet
RészletesebbenProgramozás II. 3. gyakorlat Objektum Orientáltság C++-ban
Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus
RészletesebbenA 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
RészletesebbenQt rajzolás munkafüzet. Elemi Alkalmazások fejlesztése 3.
Qt rajzolás munkafüzet Elemi Alkalmazások fejlesztése 3. 1. fejezet Impresszum Qt rajzolás munkafüzet (C)2006 Zimler Attila Tamás Visszajelzéseket szivesen fogadok. A munkafüzet
RészletesebbenAdatbá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
RészletesebbenESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor
ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés Készítette: Gregorics Tibor Előfeltétel: OAF (EAF2) Kötelező házi feladatok: 4 darab feladat max. 5-5 pontért Feltételek 2 hét késés: legfeljebb 3
RészletesebbenKét csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).
Grafikus felhasználói felület Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később). Mi hogyan használjuk? awt: eseménykezelés,
RészletesebbenJava 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
RészletesebbenWEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK
WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK Horváth Győző Egyetemi adjunktus 1117 Budapest, Pázmány Péter sétány 1/C, 2.420 Tel: (1) 372-2500/1816 2 Ismétlés Ismétlés 3 Fájl/Adatbázis 3 4 Szerver 2 CGI
RészletesebbenFeladat. Tervezés és implementálás
Tartalomjegyzék FELADAT...2 Elvárások...2 TERVEZÉS ÉS IMPLEMENTÁLÁS...2 Megjelenési terv...2 Grafikus felület készítése...3 Modulszerkezet...3 Osztály diagram...3 MillMain form...4 Vezérlő k elrendezése...4
RészletesebbenPelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;
Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely
RészletesebbenSorosí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
RészletesebbenJohanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba
Ugráló gomb Készítsünk egy egyszerű játékprogramot, ami egy mozgó nyomógombot tartalmaz. A nyomógomb beállított ideig marad egy helyben, majd az ablakon számára elhatárolt terület (panel) egy véletlenszerűen
RészletesebbenJava Programozás 5. Gy: Java alapok. Adatkezelő 1.rész
Java Programozás 5. Gy: Java alapok Adatkezelő 1.rész 27/1 B ITv: MAN 2018.04.13 Feladat Egy nagyon hosszú feladatmegoldásba kezdünk bele: létrehozunk egy adatkezelő programot, sok-sok extrával: 27/2 A
RészletesebbenSwing GUI készítése NetBeans IDE segítségével
Programozási Swing e NetBeans IDE segítségével Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 2 2 Eddig a grafikus felhasználói felületet kódból hoztuk létre kézzel. A mi feladatunk volt az
RészletesebbenFelhaszná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
RészletesebbenAdabá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\
Részletesebben4. Ö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()
RészletesebbenProgramozá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
RészletesebbenProgramozá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
Részletesebbenmunkafü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
Részletesebbené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
RészletesebbenJohanyák Zsolt Csaba: Grafikus felület programozása. http://www.johanyak.hu e-mail: johanyak.csaba@gamf.kefo.hu Copyright 2008 Johanyák Zsolt Csaba
Johanyák Zsolt Csaba: Grafikus felület programozása http://www.johanyak.hu e-mail: johanyak.csaba@gamf.kefo.hu Copyright 2008 Johanyák Zsolt Csaba 1. Gyümölcsárazó automata Készítsünk egy gyümölcsárazó
RészletesebbenJava 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
RészletesebbenISA 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
RészletesebbenAdatbá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
RészletesebbenJava 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
RészletesebbenC++ 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
RészletesebbenA 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
RészletesebbenProgramozás II. 2. gyakorlat Áttérés C-ről C++-ra
Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,
RészletesebbenSQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók
SQL*Plus Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP dolgozó), DEPT osztály) "közönséges" felhasználók Adatszótár: metaadatokat tartalmazó, csak olvasható táblák táblanév-prefixek:
RészletesebbenEseményvezérelt alkalmazások fejlesztése I 7. előadás. Összetett grafikus felületű alkalmazások. Giachetta Roberto
Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése I 7. előadás Összetett grafikus felületű alkalmazások Giachetta Roberto http://people.inf.elte.hu/groberto Ablakok
RészletesebbenProgramozási nyelvek Java
statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály
RészletesebbenJava 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
RészletesebbenGrafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.
Programozási Grafikus Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 2 Grafikus felhasználói felület Két csomag elemeiből lehet a felületet elkészíteni awt: heavy weight" komponensek swing:
RészletesebbenEseményvezérelt alkalmazások fejlesztése I 6. előadás. Összetett alkalmazások megvalósítása. Giachetta Roberto
Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése I 6. előadás Összetett alkalmazások megvalósítása Giachetta Roberto A jegyzet az ELTE Informatikai Karának 2014.
RészletesebbenProgramozási technológia I. programból! A Gomb4 megoldásból induljunk ki!
Menü Menü Egészítsük ki a kattintás számláló programot egy menüvel, amelyben nullázhatjuk a számláló értékét, illetve kiléphetünk a programból! A Gomb4 megoldásból induljunk ki! Menü Menüsor felépítése
RészletesebbenProgramozási alapismeretek 4.
Programozási alapismeretek 4. Obejktum-Orientált Programozás Kis Balázs Bevezetés I. Az OO programozási szemlélet, egy merőben más szemlélet, az összes előző szemlélettel (strukturális, moduláris, stb.)
RészletesebbenHozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):
Oracle adatbázis elérése A gyakorlat célja az, hogy a hallgató tapasztalatot szerezzen egy szerver oldali adatbázis kezelő rendszer elérésében, gyakorolja a vizuális eszközök és a kapcsolat nélküli (Disconnected
RészletesebbenElemi Alkalmazások Fejlesztése II.
Elemi Alkalmazások Fejlesztése II. Osztályok közötti kapcsolatok öröklődés asszociáció aggregáció kompozíció 1. Feladat Készítsünk programot, amellyel testek térfogatát határozhatjuk meg, illetve megadhatjuk
Részletesebben17. Többdokumentumos alkalmazások készítése..3 A többdokumentumos felület...3. A program elkészítése...27
vi 18. Szöveges input- és outputkezelés...........25 Szöveg kiírása.............................25 A program elkészítése........................5 A programhoz tartozó osztályok, fájlok és forráskód......8
RészletesebbenAccess 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
RészletesebbenPé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
RészletesebbenObjektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015
Objektumorientált programozás Pál László Sapientia EMTE, Csíkszereda, 2014/2015 7. ELŐADÁS Több információ az alkalmazásban - Fülek az űrlapon - Több űrlapos alkalmazások 2 Több információ az alkalmazásban
Részletesebben1. 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
RészletesebbenOAF 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
RészletesebbenHVK Adminisztrátori használati útmutató
HVK Adminisztrátori használati útmutató Tartalom felöltés, Hírek karbantartása A www.mvfportal.hu oldalon a bejelentkezést követően a rendszer a felhasználó jogosultsági besorolásának megfelelő nyitó oldalra
RészletesebbenProgramozás C++ -ban 2007/4
Programozás C++ -ban 2007/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 szempontból is hasznos
RészletesebbenAvery Design Pro 4.0
Avery Design Pro 4.0 Felhasználói útmutató Az Avery Design egy egyszerű, de sokfunkciós, könnyen kezelhető címkenyomtató, kártyatervező program. Készítsük el a kártyasablont Indításkor az Üdvözlő ablak
RészletesebbenBME MOGI Gépészeti informatika 8.
BME MOGI Gépészeti informatika 8. 1. feladat Készítse beosztottak és vezetők munkahelyi adatait kezelő alkalmazást! A feladat megoldásához hozza létre a következő osztályokat! Beosztott osztály: adatmező
Részletesebben1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7
1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7 1.1. Új virtuális gép és Windows Server 2008 R2 Enterprise alap lemez létrehozása 1.2. A differenciális lemezek és a két új virtuális
Részletesebben1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?
1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"
RészletesebbenA Java nyelv. Dialógus ablakok. Elek Tibor
A Java nyelv Dialógus ablakok Elek Tibor Dialógus ablakok Szerepe: felbukkanó ablak (üzenet, input) Felépítése, használata majdnem ua., mint JFrame Tulajdonos: lehet tulajdonosa, amellyel együtt ikonizálódik,
RészletesebbenGrafikus felhasználói felületek, eseménykezelés
Programozási Grafikus felhasználói felületek, eseménykezelés alapjai Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 2 alapjai 3 alapjai 2 alapjai Egészítsük ki a már korábban elkészített Számláló
RészletesebbenOOP: 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
RészletesebbenMakrók használata az Excelben - Makróhibák kezelése, biztonságos jelszavak generálása
Makrók használata az Excelben - Makróhibák kezelése, biztonságos jelszavak generálása Makróhibák kezelése A Visual Basic szerkesztőablakában szerkesztés közben elindított futtatással ellenőrizhetjük a
RészletesebbenDiákigazolvány. Belépés> Adminisztráció> Iskolai oktatás képes menü> diákigazolvány> diákigazolvány igénylés
Tartalom Új diákigazolvány igénylés folyamata... 2 1. IAR feltöltéshez szükséges jogosultságok beállítása... 2 2. Token kérés... 2 3. Új igénylés feladása... 2 Igénylések keresése, szinkronizálása... 4
RészletesebbenVisual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.
Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat
Részletesebben