Elemi alkalmazások fejlesztése III

Hasonló dokumentumok
Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III. SDI alkalmazás készítése Qt-ben I.

C++/Qt alapú SDI alkalmazás készítése II...2

ELTE Informatikai Kar

Elemi alkalmazások fejlesztése IV. Adatbáziskezelő alkalmazás készítése C++/Qt ben I.

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III.

Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 3/3

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III

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

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

Elemi alkalmazások fejlesztése IV.

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III

Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 2/3

3D-s számítógépes geometria és alakzatrekonstrukció

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

Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 1/3

A slotfilequit() módosítása...18 Ami még hátra van...18 Projekt összeállítása Qt parancsokkal...19

SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME

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

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása

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

Elemi alkalmazások fejlesztése III.

Adatbázis-kezelés ODBC driverrel

Elemi alkalmazások fejlesztése III

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

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

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

Tervezőeszközök, fejlesztőeszközök használata Qt alapú alkalmazásoknál. Saját vezérlő használata tervezőben (worldclocks)

Qt rajzolás munkafüzet. Elemi Alkalmazások fejlesztése 3.

Budapest, március. ELTE Informatikai Kar

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

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.

Eseménykezelés. Aszinkron kommunikáció

3. Osztályok II. Programozás II

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.

Eseményvezérelt alkalmazások fejlesztése I 6. előadás. Összetett alkalmazások megvalósítása. Giachetta Roberto

3D-s számítógépes geometria és alakzatrekonstrukció

Eseményvezérelt alkalmazások fejlesztése I 7. előadás. Összetett grafikus felületű alkalmazások. Giachetta Roberto

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Elemi 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

Adatbázis-kezelés ODBC-vel

Access adatbázis elérése OLE DB-n keresztül

ISA szimulátor objektum-orientált modell (C++)

Elemi alkalmazások fejlesztése III.

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

Programozás C++ -ban

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

117. AA Megoldó Alfréd AA 117.

Grafikus Felhasználói Felületű (GUI) program készítése a QT Creatorral, illetve a Microsoft Visual Studio-val

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

osztályok kapcsolata Származtatatás C++ Izsó Tamás március 19. Izsó Tamás Származtatatás/ 1

Hálózati alkalmazások

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

C#, OOP. Osztályok tervezése C#-ban

Objektumok inicializálása

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

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

bool _freehand = false; QPoint _lastpoint; // ebben a pontban volt az utolsó rajzolásnál az egérmutató

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

Java programozási nyelv 5. rész Osztályok III.

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

Mobil alkalmazások fejlesztése

Összetett alkalmazások

1. Alapok. Programozás II

Mobil informatika gyakorlat. 2. óra: NFC a gyakorlatban

Programozás C++ -ban 2007/4

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

C# osztályok. Krizsán Zoltán

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

Java Programozás 11. Ea: MVC modell

BME MOGI Gépészeti informatika 7.

Elemi alkalmazások fejlesztése I.

Virtuális függvények (late binding)

Eseménykezelés. Aszinkron kommunikáció

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Alkalmazások fejlesztése III. Qt 4 /C++ alapú grafikus alkalmazás - Memóriajáték 1/2

Eseményvezérelt alkalmazások

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Osztályok. 4. gyakorlat

ADATBÁZISKEZELÉS KÖZVETLEN ELÉRÉSSEL II...2

Osztály és objektum fogalma

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

Programozás II. 6.Öröklés Dr. Iványi Péter

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

C++ programozási nyelv Konstruktorok-destruktorok

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Programozás II. 4. Dr. Iványi Péter

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

és az instanceof operátor

A Java nyelv. Dialógus ablakok. Elek Tibor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Átírás:

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 tartalmának megadása Számlatétel hozzáadása Számlatétel módosítása Számlatétel törlése Számla mentése fájlba Számla betöltése fájlból 2

Üres projekt létrehozása (KDevelop 2) 3

Az InvoicerViewBase osztályt a Qt Designerrel készítjük el. QWidget Osztálystruktúra QObject InvoicerViewBase InvoicerDoc InvoicerView QMainWindow Invoicer 4

invoice A számla fejlécének felépítése zip customer city street header invno released fulfilled dueto 5

invoice Egy számlatétel felépítése itemname quantity netprice vat items unit unitprice vatpercent grossprice 6

Qt designer invoicerview base.ui UIC invoicer viewbase.h invoicer viewbase.cpp 8

InvoicerDoc osztály QWidget QObject InvoicerViewBase InvoicerDoc InvoicerView QMainWindow Invoicer 9

Qt designer InvoicerDoc osztály: fájlok invoicerview base.ui invoicer doc.h UIC invoicer doc.cpp invoicer viewbase.h invoicer viewbase.cpp 11

InvoicerDoc: definíció #include <qobject.h> 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; invoicerdoc.h signals: void documentchanged(); protected: bool modified; }; 12

InvoicerDoc: konstruktor/destruktor #include "invoicerdoc.h" InvoicerDoc::InvoicerDoc() modified = false; } invoicerdoc.cpp InvoicerDoc::~InvoicerDoc() } 13

InvoicerDoc: newdoc(), save(), saveas() void InvoicerDoc::newDoc() //TODO j dokumentum løtrehozæsa } invoicerdoc.cpp 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; } 14

InvoicerDoc: load(), ismodified() bool InvoicerDoc::load(const QString & /*filename*/ ) //TODO Új dokumentum betöltése emit documentchanged(); return true; } invoicerdoc.cpp bool InvoicerDoc::isModified() const return modified; } 15

InvoicerView osztály QWidget QObject InvoicerViewBase InvoicerDoc InvoicerView QMainWindow Invoicer 16

Qt designer InvoicerView osztály: fájlok invoicerview base.ui invoicer doc.h UIC invoicer doc.cpp invoicer viewbase.h invoicer view.h invoicer viewbase.cpp Örökl ő dés invoicer view.cpp 18

InvoicerView: definíció #include "invoicerdoc.h" #include "invoicerviewbase.h" class InvoicerView : public InvoicerViewBase Q_OBJECT public: InvoicerView(QWidget *parent=0, InvoicerDoc* doc=0); ~InvoicerView(); protected slots: void slotdocumentchanged(); }; invoicerview.h Ha az adat megváltozott, a nézetet frissíteni kell. 19

InvoicerView: implementáció #include "invoicerview.h" InvoicerView::InvoicerView(QWidget *parent, InvoicerDoc *doc) : InvoicerViewBase(parent) connect(doc, SIGNAL(documentChanged()), this, SLOT(slotDocumentChanged())); } InvoicerView::~InvoicerView() } void InvoicerView::slotDocumentChanged() //TODO update the view } invoicerview.cpp 20

Az alkalmazás f ő ablakának létrehozása Mielőtt elkészítenénk az InvoicerView osztályt nézzük meg a QMainWindow szerkezetét és a felhasználói események kezelését Qt-ben. 21

QMainWindow osztály szerkezete Caption X menubar() topdock() leftdock() centralwidget() rightdock() bottomdock() statusbar() 22

A QAction osztály A felhasználói felülethez kötött tevékenységek absztrakciója. Megjelenhet menükben és eszközsoron is. Fajtái: Command action tevékenység végrehajtására szolgál amikor a tevékenységet el kell végezni activated() signalt küld Toggle action flag (opció) beállítására szolgál az opció változásakor toggled(bool) signalt küld csoportosítható (QActionGroup) 23

A QAction osztály összetev ő i text icon menu text accelerator status tip tool tip 24

QAction: filenew 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")); Üzenet a státuszsorban 25

Tevékenység és menüpont összekapcsolása QAction (filenew) filemenu=new QPopupMenu(); menubar()->insertitem(tr("&file"), filemenu); filenew->addto(filemenu); 26

Tevékenység és tevékenységkezel ő összekapcsolása QAction (filenew) activated() connect(filenew, SIGNAL(activated()), this, SLOT(slotFileNew())); 28

Invoicer osztály QWidget QObject InvoicerViewBase InvoicerDoc InvoicerView QMainWindow Invoicer 29

Qt designer Invoicer osztály: fájlok invoicerview base.ui invoicer doc.h UIC invoicer doc.cpp invoicer.h invoicer viewbase.h invoicer viewbase.cpp Örökl ő dés invoicer view.h invoicer view.cpp invoicer.cpp 31

Invoicer: inicializáló m ű veletek initaction() 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 32

"! P ` Invoicer: Slotok slotfilenew().- ), *+ $) (' & $%# ;: / 9 58 67 05 43 2 01/ =B A@? =>< LMON K IJH ]^O_ \ Z[Y GF? A CED utt m s r l q kp noo m klj X I NW W K J I J J VU TS IR Q J J i Z _h h \ [ Z [ [ gf d be Y \ c a \ b Új dokumentum létrehozása Dokumentum beolvasá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 33

y v } z xz Š ˆ ƒ Invoicer: adattagok doc wox } ~ x Œ ƒ Ž Az aktuália dokumetum (InvoicerDoc) objektumra mutató pointer Az aktuális (és egyetlen) nézet (InvoicerView) objektumra mutató pointer. QPopupMenu, QToolBar QAction 34

Invoicer definíció: konstruktor #include <qmainwindow.h> #include "invoicerview.h" invoicer.h class QAction; class Invoicer : public QMainWindow Q_OBJECT public: Invoicer(QWidget *parent = 0, const char *name = 0);... 35

Invoicer definíció: privát tagfüggvények... private: /** initializes all QActions of the application */ void initactions(); void initmenubar(); void inittoolbar(); void initstatusbar(); void initdoc(); void initview(); invoicer.h bool queryexit();... 36

Invoicer definíció: privát slotok... private slots: void slotfilenew(); void slotfileopen(); void slotfilesave(); void slotfilesaveas(); void slotfilequit(); void slotviewtoolbar(bool toggle); void slotviewstatusbar(bool toggle); void slothelpabout();... invoicer.h 37

Invoicer definíció: privát adattagok... private: invoicer.h 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; }; 38

Invoicer implementáció: Header fájlok #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> invoicer.cpp #include "invoicer.h"... 39

... 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(); Invoicer implementáció: Konstruktor viewtoolbar->seton(true); viewstatusbar->seton(true); invoicer.cpp }... 40

Invoicer implementáció: initactions()... void Invoicer::initActions() invoicer.cpp 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()));... 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)));... } 41

Invoicer implementáció: 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 CONFIGURATION menubar()->insertitem(tr("&file"), filemenu); menubar()->insertitem(tr("&view"), viewmenu); menubar()->insertseparator(); menubar()->insertitem(tr("&help"), helpmenu); } invoicer.cpp 42

Invoicer implementáció: 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); invoicer.cpp } 43

Invoicer implementáció: initstatusbar() void Invoicer::initStatusBar() //STATUSBAR statusbar()->message(tr("ready."), 2000); } invoicer.cpp 44

Invoicer implementáció: initdoc(), initview() void Invoicer::initDoc() doc=new InvoicerDoc(); } invoicer.cpp void Invoicer::initView() // set the main widget here view=new InvoicerView(this, doc); setcentralwidget(view); } invoicer.cpp 45

Invoicer implementáció: queryexit() 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; } invoicer.cpp 46

Invoicer implementáció: slotfilenew() void Invoicer::slotFileNew() statusbar()->message(tr("creating new file...")); doc->newdoc(); statusbar()->message(tr("ready.")); } invoicer.cpp 47

Invoicer implementáció: slotfilesave() void Invoicer::slotFileSave() statusbar()->message(tr("saving file...")); doc->save(); statusbar()->message(tr("ready.")); } invoicer.cpp 49

Invoicer implementáció: slotfilesaveas() 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.")); } invoicer.cpp 50

Invoicer implementáció: slotfilequit() 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.")); } invoicer.cpp 51

Invoicer implementáció: slotviewtoolbar() void Invoicer::slotViewToolBar(bool toggle) statusbar()->message(tr("toggle toolbar...")); if (toggle== false) filetoolbar->hide(); else filetoolbar->show(); statusbar()->message(tr("ready.")); } invoicer.cpp 52

Invoicer implementáció: slotviewstatusbar() void Invoicer::slotViewStatusBar(bool toggle) statusbar()->message(tr("toggle statusbar...")); if (toggle == false) statusbar()->hide(); else statusbar()->show(); statusbar()->message(tr("ready.")); } invoicer.cpp 53

Invoicer implementáció: slotviewstatusbar() void Invoicer::slotHelpAbout() QMessageBox::about(this,tr("About..."), trutf8("invoicer\nversion 1.0 \n(c) 2004 by Szabóné Nacsa Rozália")); } invoicer.cpp 54

Qt designer A f ő program: main.cpp invoicerview base.ui invoicer doc.h UIC invoicer doc.cpp invoicer.h invoicer viewbase.h invoicer viewbase.cpp Örökl ődés invoicer view.h invoicer view.cpp invoicer.cpp main.cpp 55

main.cpp File/New/C++/main.cpp #include <qapplication.h> #include "invoicer.h" main.cpp int main(int argc, char *argv[]) QApplication app(argc, argv); Invoicer *invoicer=new Invoicer(); app.setmainwidget(invoicer); invoicer->show(); return app.exec(); } 56

Vége az els ő résznek. 58