Elemi alkalmazások fejlesztése III.

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

Budapest, március. ELTE Informatikai Kar

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

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

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

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

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III.

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

Eseménykezelés. Aszinkron kommunikáció

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

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

Elemi alkalmazások fejlesztése III.

Dinamikus felületű alkalmazások. Stílusok, időzítő, képek

Eseménykezelés. Aszinkron kommunikáció

Elemi alkalmazások fejlesztése IV. Adatbáziskezel alkalmazás készítése QtDesignerben. Készítette: Szabóné Nacsa Rozália

Eseményvezérelt alkalmazások fejlesztése I 3. előadás. Dinamikus felületű alkalmazások. Giachetta Roberto

Elemi alkalmazások fejlesztése IV.

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

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

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

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

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

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III

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

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ó

Eseményvezérelt alkalmazások fejlesztése I 2. előadás. Egyszerű, egyablakos alkalmazások

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

2. Beadandó feladat dokumentáció

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

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

Hálózati alkalmazások

2. Beadandó feladat dokumentáció

Elemi alkalmazások fejlesztése

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

Programozás C++ -ban 2007/4

Egyszerű, egyablakos alkalmazások. vezérlők, ablakok, elrendezők

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

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

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

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

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

Programozás C++ -ban

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

3. Osztályok II. Programozás II

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Összetett alkalmazások

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

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

Eseményvezérelt alkalmazások

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

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

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

QT Grafika Az alap alkalmazás felhasználói felülete

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Alkalmazott modul: Programozás 12. előadás. Grafikus felületű alkalmazások fejlesztése

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

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

Modell megvalósítása. Gregorics Tibor: Eseményvezérelt alkalmazások fejlesztése I.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

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

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

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

Programozás C és C++ -ban

Informatikai Navigátor

500. AA Megoldó Alfréd AA 500.

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

Ugráló gomb oktatási segédlet Ugráló gomb

Programozás 6. Dr. Iványi Péter

500. CC Megoldó Alfréd CC 500.

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

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

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

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

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

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?

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

C programozási nyelv

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Objektumorientált programozás C# nyelven III.

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Adatbázis-kezelés modell/nézet architektúrában

Programozási technológia

Programozás I. gyakorlat

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

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Adatbázis-kezelés ActiveX vezérl kkel

Szövegek C++ -ban, a string osztály

Átírás:

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 Qt osztályokkal: Hello Qt QObject QLabel QApplication hello projekt main.cpp #include <QApplication> #include <QLabel> int main(int argc,char **argv) QApplication app(argc,argv); Használhatunk html formázást. //QLabel *label = new QLabel("Hello Qt!"); QLabel *label = new QLabel("<h1><i>Hello </i><font color=red>qt!</font></h1>"); label >show(); return app.exec(); people.inf.elte.nacsa/qt4/eaf3/mod01/projects/hello 3

hello projekt Fordítás/futtatás parancs sorból Linux qmake project qmake hello.pro make./hello 4

Eseménykezelés signal slot mechanizmussal kattintás esemény connect lcd projekt eseménykezelő... emit adas1(); emit adas2(); emit adas3(); adas1(signal) adas2(signal) adas3(signal) vétel1(slotl) vétel3(slotl) public slots: void vétel1(); void vétel3(); Adás vétel (pl. rádió) 5

Alkalmazás Qt osztályokkal: Jelek és jelvevők összekapcsolása QObject QPushButton QApplication lcd projekt main.cpp #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) QApplication app(argc,argv); QPushButton *button = new QPushButton("Quit"); A gomb clicked() jelzését összekapcsoljuk az alkalmazás quit() jelvevő függvényével (slot). QObject::connect(button,SIGNAL(clicked()),&app,SLOT(quit())); button >show(); return app.exec(); people.inf.elte.nacsa/qt4/eaf3/mod01/projects/quit 6

Több vezérlő összekapcsolása, együttműködésük összehangolása form.h lcd projekt form.cpp main.cpp Caption mainlayout QSpinBox QSlider toplayout QLCDNumber 7

A grafikus felület osztály definiálása (Form osztály) form.h class QSpinBox; class QSlider; class QLCDNumber; class QHBoxLayout; class QVBoxLayout; #include <QWidget> Caption lcd projekt class Form: public QWidget Q_OBJECT public: Form(QWidget *parent=0); private: QSpinBox *spinbox; QSlider *slider; QLCDNumber *lcd; ; QHBoxLayout *toplayout; QVBoxLayout *mainlayout; QSpinBox QSlider QLCDNumber 8

Form osztály: konstruktor form.cpp Form::Form(QWidget *parent) : QWidget(parent) spinbox = new QSpinBox; setobjectname(qstring::fromutf8("spinbox")); spinbox >setrange(0,100); #include <QLayout> #include <QSpinBox> #include <QSlider> #include <QLCDNumber> #include "form.h" Caption lcd projekt slider = new QSlider(Qt::Horizontal); setobjectname(qstring::fromutf8("slider")); slider >setrange(0,100); slider >setsinglestep(10); slider >setorientation(qt::horizontal); slider >settickposition(qslider::ticksbelow); lcd = new QLCDNumber; setobjectname(qstring::fromutf8("lcd"));... QSpinBox QSlider QLCDNumber Vezérlők létrehozása és tulajdonságainak beállítása. 9

A Form osztály konstruktora elrendezés lcd projekt form.cpp Form::Form(QWidget *parent) : QWidget(parent)... toplayout = new QHBoxLayout; toplayout >addwidget(spinbox); toplayout >addwidget(slider); mainlayout = new QVBoxLayout; mainlayout >addlayout(toplayout); mainlayout >addwidget(lcd); mainlayout >setmargin(11); //11 pixel margó az elrendez ő köé mainlayout >setspacing(6); //6 pixel helyköz a vezérlők között setlayout(mainlayout); Elemek elrendezése. Caption QSpinBox QSlider QLCDNumber connect(spinbox, SIGNAL(valueChanged(int)), lcd, SLOT(display(int))); connect(spinbox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int))); connect(slider, SIGNAL(valueChanged(int)), spinbox, SLOT(setValue(int))); Jeladók és jelfeldolgozók összekapcsolása. 10

Fordítás, futtatás lcd projekt #include <QApplication> #include "form.h" int main(int argc, char *argv[]) QApplication app(argc,argv); main.cpp Form *form = new Form; form >show(); return app.exec(); lcd.pro TEMPLATE = app TARGET = DEPENDPATH +=. INCLUDEPATH +=. # Input HEADERS += form.h SOURCES += form.cpp main.cpp people.inf.elte.nacsa/qt4/eaf3/mod01/projects/lcd 11

Memóriagazdálkodás mainlayout toplayout Caption Form QSpinBox(spinBox) lcd projekt QSpinBox QSlider QLCDNumber QSlider(slider) QLCDNumber(lcd) QVBoxLayou(mainLayout) QVBoxLayou(topLayout) Csak azokat a widget-eket kell törölni, amelyeket new operátorral hozunk létre és nincs szülője. 12

A Qt Designer használata Grafikus felület Designer myform.ui uic ui_myform.h Ui_MyForm myform.h QWidget MyForm myform.cpp 13

display projekt Qt Designer: felület tervezése Ez a program megegyezik az előző lcd projekt programjával, csak most Qt Designer-t is használunk az elkészítéséhez. 14

display projekt (mayform.ui) Qt Designer: Jelek és jeladók összekapcsolása Edit/Edit Signals and Slots (F4) Kapcsolatok szerkesztése. Ui_Myform osztály 15

A származtatott MyForm osztály megvalósítása display projekt myform.h #include <QWidget> #include "ui_myform.h" class MyForm : public QWidget, private Ui_MyForm Q_OBJECT public: MyForm(QWidget *parent = 0); ; myform.cpp main.cpp #include <QApplication> #include "myform.h" int main (int argc, char *argv[]) QApplication app(argc,argv); MyForm *form = new MyForm; form >show(); return app.exec(); #include "myform.h" MyForm::MyForm(QWidget *parent) : QWidget(parent) setupui(this); people.inf.elte.nacsa/qt4/eaf3/mod01/projects/display 16

Saját eseménykezelő készítése Konvertáló program MainForm conver projekt quitbutton decimallineedit hexalineedit QMessageBox 17

A Qt Designer használata convertdialog.ui Grafikus felület Designer convert projekt uic ui_convertdialog.h Ui_ConvertDialog convertdialog.h QWidget ConvertDialog convertdialog.cpp 18

Saját grafikus osztály megvalósítása származtatással convertdialog.h #ifndef _CONVERT_DIALOG_H_ #define _CONVERT_DIALOG_H_ #include <QWidget> A Qt Designerrel készített felület implementációja. #include "ui_convertdialog.h" convert projekt class ConvertDialog : public QWidget, private Ui_ConvertDialog Q_OBJECT Ha saját signal-t, vagy slot-ot public: használunk, akkor mindig meg kell ConvertDialog(QWidget *parent = 0); adni a Q_OBJECT makrót. public slots: void on_quitbutton_clicked(); Metanyelvi elem. void updatehexalineedit(const QString & str); A moc (meta object compiler) void updatedecimallineedit(const QString & str); készít belőle szabványos kódot. private: QString convert(const QString& str, const int frombase, const int tobase); ; #endif // _CONVERT_DIALOG_H_ 19

convertdialog.cpp ConvertDialog: konstruktor #include <QMessageBox> #include "convertdialog.h" convert projekt ConvertDialog::ConvertDialog(QWidget *parent) : QWidget(parent) setupui(this); connect(decimallineedit, SIGNAL(textEdited(const QString &)), this, SLOT(updateHexaLineEdit(const QString &))); connect(hexalineedit, SIGNAL(textEdited(const QString &)), this, SLOT(updateDecimalLineEdit(const QString &))); AsetupUi() inicializálja a tervezővel készített elemeket. void ConvertDialog::on_quitButton_clicked() // a "névkonvenció" miatt nem kell connect qapp >quit(); //qapp az (egyetlen!) alkalmazásunkra mutató pointer 20

ConvertDialog: Eseménykezelők convertdialog.cpp void ConvertDialog::updateHexaLineEdit(const QString & str) hexalineedit >settext(convert(str,10,16).toupper()); convert projekt void ConvertDialog::updateDecimalLineEdit(const QString & str) decimallineedit >settext(convert(str,16,10)); QString ConvertDialog::convert(const QString& str, const int frombase, const int tobase) QString ret = ""; Az str stringet számként értelmezve a bool ok; frombase számrendszerből tobase int value = str.toint(&ok, frombase); számrendszerbeli számra konvertálja át, és if(ok) visszaadja az így előállított számot ret = QString::number(value,toBase); szöveges formában. else QMessageBox::information(this, "Convert Dialog", QString::number(value) + " is not a valid number."); return ret; 21

Konvertáló program Fordítás/futtatás main.cpp #include <QApplication> #include "convertdialog.h" int main (int argc, char *argv[]) QApplication app(argc,argv); convert projekt ConvertDialog *dialog = new ConvertDialog; dialog >show(); return app.exec(); 22

worldclock projekt Saját vezérlő használata Qt Designerben 23

Ismétlő időzítő, egyszeri időzítő QTimer QTimer 24

Digitális óra készítése digitalclock.h worldclock projekt digitalclock.cpp main.cpp Esemény kiváltása nem vizuális elemmel. 25

Digitális óra definíciója digitalclock.h worldclock projekt #include <QLCDNumber> class DigitalClock : public QLCDNumber Q_OBJECT public: DigitalClock(QWidget *parent = 0); void settimezone(int time) mtimezone = time; private slots: void showtime(); private: int mtimezone; ; Beállítjuk az űrlap címkesorát és a kezdeti méretét. DigitalClock::DigitalClock(QWidget *parent) : QLCDNumber(parent) setsegmentstyle(filled); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(showTime())); timer >start(1000); showtime(); setwindowtitle(tr("digital Clock")); resize(150, 60); void DigitalClock::showTime() digitalclock.cpp #include <QTimer> #include <QDateTime> #include "digitalclock.h" QTime time = QTime::currentTime().addSecs(mTimeZone *60 *60); QString text = time.tostring("hh:mm"); if ((time.second() % 2) == 0) text[2] = ' '; display(text); 26

worldclock projekt Qt Designer saját vezérlő használata közben Az eszköztárból ráhúzunk az űrlapra a saját vezérlő ősosztálybeli elemét. A Promote paranccsal megadjuk a saját vezérlőnket megvalósító osztályt. 27

worldclock projekt Vezérlők elrendezése: Lay out Vertically 28

worldclock projekt Vezérlők elrendezése: Lay out in Grid 29

MyForm osztály myform.h worldclock projekt #include <QWidget> #include "ui_myform.h" class MyForm : public QWidget, private Ui_MyForm Q_OBJECT public: MyForm(QWidget *parent = 0); ; myform.cpp #include "myform.h" MyForm::MyForm(QWidget *parent) : QWidget(parent) setupui(this); lcdlondon >settimezone( 1); lcdtokio >settimezone(8); lcdmoscow >settimezone(2); lcdalaska >settimezone( 10); lcdnewzealand >settimezone(11); main.cpp #include <QApplication> #include "myform.h" int main (int argc, char *argv[]) QApplication app(argc,argv); MyForm *form = new MyForm; form >show(); return app.exec(); 30

A bemutatott programok megtalálhatók a people.inf.elte.nacsa/qt4/eaf3/mod01/projects/ címen. 31