Eseményvezérelt alkalmazások fejlesztése I 1. előadás. Grafikus felület és eseményvezérlés, a Qt keretrendszer

Hasonló dokumentumok
Eseményvezérelt alkalmazások fejlesztése I 1. előadás. Grafikus felület és eseményvezérlés, a Qt keretrendszer. Giachetta Roberto

Eseményvezérelt alkalmazások fejlesztése I. Tantárgyfelelős: Gregorics Tibor

Eseményvezérelt alkalmazások fejlesztése I. Tantárgyfelelős: Gregorics Tibor

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

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III.

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

2. Beadandó feladat dokumentáció

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

Elemi alkalmazások fejlesztése III.

2. Beadandó feladat dokumentáció

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

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

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.

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

Hálózati alkalmazások

Eseménykezelés. Aszinkron kommunikáció

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

Budapest, március. ELTE Informatikai Kar

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

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

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Adatkezelés speciális eszközökkel. Giachetta Roberto

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

Adatok speciális megjelenítése

3. Beadandó feladat dokumentáció

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

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

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

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

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

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

Elemi alkalmazások fejlesztése III.

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

Már megismert fogalmak áttekintése

Mobil Informatikai Rendszerek

Bánsághi Anna 2015 Bánsághi Anna 1 of 39

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

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

Grafikus 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 technológia

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

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

Elemi alkalmazások fejlesztése IV.

HVK Adminisztrátori használati útmutató

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

Eseménykezelés. Aszinkron kommunikáció

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

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

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

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

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 2. előadás. Egyszerű, egyablakos alkalmazások

és az instanceof operátor

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

Swing GUI készítése NetBeans IDE segítségével

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

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

A szerzõrõl... xi Bevezetés... xiii

Java programozási nyelv 6. rész Java a gyakorlatban

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

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

Programozási technológia

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Giachetta Roberto

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

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

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

Webes alkalmazások fejlesztése. Bevezetés az ASP.NET MVC 5 keretrendszerbe

Interfészek. PPT 2007/2008 tavasz.

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

2. Beadandó feladat dokumentáció

OOP #14 (referencia-elv)

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

Programozási nyelvek JAVA EA+GY 1. gyakolat

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Programozás I. gyakorlat

Grafikus felhasználói felület (GUI) létrehozása A GUI jelentése Egy egyszerű GUI mintaalkalmazás létrehozása

munkafüzet open eseményéhez

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

Adatbáziskezelés M/V architektúrában

Elemi alkalmazások fejlesztése III.

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?

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).

Az importálás folyamata Felhasználói dokumentáció verzió 2.1.

Grafikus felhasználói felületek, eseménykezelés

LEADER. Helyi Fejlesztési Stratégiák. tervezését támogató alkalmazás

Eseménykezelés - Lottó játék

Tartalomjegyzék. Előszó... 10

Models are not right or wrong; they are more or less useful.

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

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

ContractTray program Leírás

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Podoski Péter és Zabb László

Mobil Informatikai Rendszerek

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése I 1. előadás Grafikus felület és eseményvezérlés, a Qt keretrendszer 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Bemutatása A Qt egy alkalmazás-fejlesztési keretrendszer, amely számos platformot támogatja az asztali, mobil és beágyazott alkalmazások fejlesztését elérhető a qt.io oldalról támogatja a grafikus felületet, adatbázis-kezelést, multimédiát, 3D grafikát, hálózati és webes kommunikációt rendelkezik nyílt forráskódú (LGPL) és kereskedelmi verzióval is fejlesztésre elsősorban a C++-t támogatja, de más nyelvekre is elérhető, valamint rendelkezik saját leíró nyelvvel (Qt Quick) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:2

A Hello World program #include <QApplication> #include <QLabel> // megfelelő Qt osztályok használata int main(int argc, char *argv[]) { QApplication app(argc, argv); // alkalmazás osztály példányosítása QLabel mylabel("hello, world!"); // címke a felirattal mylabel.show(); // címke megjelenítése } return app.exec(); // alkalmazás futtatása ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:3

A grafikus felületű alkalmazás Grafikus felületű alkalmazásnak nevezzük azt a programot, amely 2D-s interaktív felhasználó felületen (GUI, Graphical User Interface) keresztül kommunikál a felhasználóval gazdagabb interakció a konzol felületnél, számos módon beleavatkozhatunk a programfutásba a működés jórészt várakozás a felhasználói interakcióra a felület egy, vagy több ablakból (form/window) áll, amelyek vezérlőket (control/widget) tartalmaznak (pl.: nyomógombok, listák, menük,...) mindig van egy aktív ablak, és egy aktív vezérlő (ezen van a fókusz) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:4

A grafikus felületű alkalmazás ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:5

A grafikus felületű alkalmazás vezérlő (szövegmező) alkalmazás funkciók vezérlő (címke) ablakcím fejléc fókuszált vezérlő (nyomógomb) vezérlő (táblanézet) ablakfelület (rajzolva) vezérlőben lévő vezérlő (kijelölőmező) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:6

A grafikus felület felépülése A grafikus felület objektumorientáltan épül fel a vezérlőket osztályokként fogalmazzuk meg, megadjuk viselkedését (metódusokkal, pl. kattintás, megjelenés), illetve tulajdonságait (mezőkkel, pl. pozíció, méret, betűtípus) a vezérlők sok hasonló tulajdonsággal bírnak, így könnyen öröklődési hierarchiába szervezhetőek az öröklődési lánc legelején áll az általános vezérlő, új vezérlők származtatással definiálhatóak a vezérlőket felhasználhatjuk más vezérlőkben, vagy használhatjuk önállóan, azaz ablakként ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:7

A grafikus felület felépülése QObject QWidget... QFrame QComboBox QTabWidget QButton... QLabel QLineEdit... QPushButton QCheckBox... ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:8

A grafikus felület felépülése QObject + staticmetaobject :QMetaObject {readonly} # d_ptr :QScopedPointer<QObjectData> # staticqtmetaobject :QMetaObject {readonly} + QObject(QObject*) + ~QObject() + event(qevent*) :bool + eventfilter(qobject*, QEvent*) :bool + tr(char*, char*, int) :QString + trutf8(char*, char*, int) :QString + metaobject() :QMetaObject * {query} + tr(char*, char*, int) :QString + tr(char*, char*) :QString + trutf8(char*, char*, int) :QString + trutf8(char*, char*) :QString + objectname() :QString {query} + setobjectname(qstring&) :void + iswidgettype() :bool {query} + signalsblocked() :bool {query} + blocksignals(bool) :bool + thread() :QThread * {query} + movetothread(qthread*) :void + starttimer(int) :int + killtimer(int) :void + findchild(qstring&) :T {query} + findchildren(qstring&) :QList<T> {query} + findchildren(qregexp&) :QList<T> {query} + children() :QObjectList & {query} + setparent(qobject*) :void + installeventfilter(qobject*) :void + removeeventfilter(qobject*) :void + connect(qobject*, char*, QObject*, char*, Qt::ConnectionType) :bool + connect(qobject*, QMetaMethod&, QObject*, QMetaMethod&, Qt::ConnectionType) :bool + connect(qobject*, char*, char*, Qt::ConnectionType) :bool {query} + disconnect(qobject*, char*, QObject*, char*) :bool + disconnect(qobject*, QMetaMethod&, QObject*, QMetaMethod&) :bool + disconnect(char*, QObject*, char*) :bool + disconnect(qobject*, char*) :bool + dumpobjecttree() :void + dumpobjectinfo() :void + setproperty(char*, QVariant&) :bool + property(char*) :QVariant {query} + dynamicpropertynames() :QList<QByteArray> {query} + registeruserdata() :uint + setuserdata(uint, QObjectUserData*) :void + userdata(uint) :QObjectUserData* {query} + destroyed(qobject*) :void + parent() :QObject * {query} + inherits(char*) :bool {query} + deletelater() :void # sender() :QObject * {query} # sendersignalindex() :int {query} # receivers(char*) :int {query} # timerevent(qtimerevent*) :void # childevent(qchildevent*) :void # customevent(qevent*) :void # connectnotify(char*) :void # disconnectnotify(char*) :void # QObject(QObjectPrivate&, QObject*) QWidget + setenabled(bool) :void + setdisabled(bool) :void + setwindowmodified(bool) :void + framegeometry() :QRect {query} + geometry() :QRect & {query} + normalgeometry() :QRect {query} + x() :int {query} + y() :int {query} + pos() :QPoint {query} + framesize() :QSize {query} + size() :QSize {query} + width() :int {query} + height() :int {query} + rect() :QRect {query} + childrenrect() :QRect {query} + childrenregion() :QRegion {query} + minimumsize() :QSize {query} + maximumsize() :QSize {query} + minimumwidth() :int {query} + minimumheight() :int {query} + maximumwidth() :int {query} + maximumheight() :int {query} + setminimumsize(qsize&) :void + setminimumsize(int, int) :void + setmaximumsize(qsize&) :void + setmaximumsize(int, int) :void + setminimumwidth(int) :void + setminimumheight(int) :void + setmaximumwidth(int) :void + setmaximumheight(int) :void + setupui(qwidget*) :void + sizeincrement() :QSize {query} + setsizeincrement(qsize&) :void + setsizeincrement(int, int) :void + basesize() :QSize {query} + setbasesize(qsize&) :void + setbasesize(int, int) :void + setfixedsize(qsize&) :void + setfixedsize(int, int) :void + setfixedwidth(int) :void +...() QPaintDevice «enumeration» RenderFlag DrawWindowBackground = 0x1 DrawChildren = 0x2 IgnoreMask = 0x4 «enumeration» InsertPolicy NoInsert InsertAtTop InsertAtCurrent InsertAtBottom InsertAfterCurrent InsertBeforeCurrent InsertAlphabetically «enumeration» SizeAdjustPolicy AdjustToContents AdjustToContentsOnFirstShow AdjustToMinimumContentsLength AdjustToMinimumContentsLengthWithIcon QComboBox + QComboBox(QWidget*) + ~QComboBox() + maxvisibleitems() :int {query} + setmaxvisibleitems(int) :void + count() :int {query} + setmaxcount(int) :void + maxcount() :int {query} + autocompletion() :bool {query} + setautocompletion(bool) :void + autocompletioncasesensitivity() :Qt::CaseSensitivity {query} + setautocompletioncasesensitivity(qt::casesensitivity) :void + duplicatesenabled() :bool {query} + setduplicatesenabled(bool) :void + setframe(bool) :void + hasframe() :bool {query} + findtext(qstring&, Qt::MatchFlags) :int {query} + finddata(qvariant&, int, Qt::MatchFlags) :int {query} + insertpolicy() :InsertPolicy {query} + setinsertpolicy(insertpolicy) :void + sizeadjustpolicy() :SizeAdjustPolicy {query} + setsizeadjustpolicy(sizeadjustpolicy) :void + minimumcontentslength() :int {query} + setminimumcontentslength(int) :void + iconsize() :QSize {query} + seticonsize(qsize&) :void + iseditable() :bool {query} + seteditable(bool) :void + setlineedit(qlineedit*) :void + lineedit() :QLineEdit * {query} + setvalidator(qvalidator*) :void + validator() :QValidator * {query} + setcompleter(qcompleter*) :void + completer() :QCompleter * {query} + itemdelegate() :QAbstractItemDelegate * {query} + setitemdelegate(qabstractitemdelegate*) :void + model() :QAbstractItemModel * {query} + setmodel(qabstractitemmodel*) :void + rootmodelindex() :QModelIndex {query} + setrootmodelindex(qmodelindex&) :void + modelcolumn() :int {query} + setmodelcolumn(int) :void + currentindex() :int {query} + currenttext() :QString {query} + itemtext(int) :QString {query} + itemicon(int) :QIcon {query} + itemdata(int, int) :QVariant {query} + additem(qstring&, QVariant&) :void + additem(qicon&, QString&, QVariant&) :void + additems(qstringlist&) :void + insertitem(int, QString&, QVariant&) :void + insertitem(int, QIcon&, QString&, QVariant&) :void + insertitems(int, QStringList&) :void +...() ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:9

Fejlesztés és fordítás A fejlesztés C++/Qt nyelven történik elérhető a teljes C++ utasításkészlet, nyelvi könyvtár a C++ nyelven felül további makrókat, kiegészítéseket tartalmaz, amelyeket a Meta Object Compiler (MOC) fordít le ISO C++ kódra Az alapértelmezett fejlesztőeszköz a Qt Creator, de más környezetekben is megjelent a Qt fejlesztés lehetősége (pl. Code::Blocks, Visual Studio) Külön tervezőprogram (Qt Designer) adott a grafikus felület létrehozására, amely XML nyelven írja la felület felépítését, ez automatikusan C++/Qt kódra fordul ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:10

Fejlesztés és fordítás Qt fordító Qt felület leírás (XML) Qt XML fordító Qt kód (C++) Qt MOC fordító C++ kód C++ fordító gépi kód ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:11

Fejlesztés és fordítás A fordítás projektszinten történik, a szükséges információk projektfájlokban (.pro) tárolódnak, amely tartalmazza a felhasznált modulokat, kapcsolókat forrásfájlok, erőforrások (pl. kép, szöveg,) listáját eredmény paramétereket A fordítás közvetlenül is elvégezhető a fordítóval: qmake project # projektfájl automatikus létrehozása qmake # fordítófájl (makefile) előállítása make # projekt fájlnak megfelelő fordítás és # szerkesztés végrehajtása ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:12

Modulok A keretrendszer felépítése modularizált, a legfontosabb modulok: központi modul (QtCore) grafikus felület (QtGui), grafikus vezérlők (QtWidgets) adatbázis-kezelés (QtSQL) A projektben használandó modulokat a projektfájlban kell megadnunk, pl.: QT += core gui widgets Egy modul tartalmát osztályonként, illetve egyszerre is betölthetjük az aktuális fájlba (pl. #include <QtGui>) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:13

Osztályhierarchia A nyelvi könyvtár osztályainak jelentős része teljes származtatási hierarchiában helyezkedik el minden egy ősosztály (QObject) leszármazottja az ősosztály biztosítja az eseménykezelést (connect), a tulajdonságkezelést, az időzítést (timer), stb. Számos segédosztállyal rendelkezik, pl.: adatszerkezetek (QVector, QStack, QLinkedList, ) fájl és fájlrendszer kezelés (QFile, QTextStream, QDir, ) párhuzamosság és aszinkron végrehajtás (QThread, QSemaphore, QFuture, ) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:14

Szövegkezelés Qt-ben a karakterek 16 bites Unicode (UTF8) kódolásúak már a QObject típus biztosítja a kódolási konverziót egy osztályszintű művelettel (QObject::trUtf8) A karakterek kezelését a QChar típus biztosítja, míg szövegre a QString típus alkalmazható kompatibilis a C++ standard könyvtár string típusával, pl.: QString::fromSTDString(stdstr) megkülönbözteti az üres és a nem létező szöveget (isnull, isempty) alkalmas típuskonverziókra, pl. QString::number(4), str.toint() ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:15

Grafikus felületű alkalmazások vezérlése A konzol felületű alkalmazások csak billentyűzettől fogadnak bemenetet a programfutás meghatározott pontjain, a vezérlés módját mi szabályozzuk (pl. főprogram, menü) A grafikus felületű alkalmazások billentyűzettől és egértől (érintőképernyőtől, stb.) fogadnak bemenetet a programfutás szinte bármely pillanatában, a vezérlés módja előre definiált A grafikus felületű alkalmazás vezérlését az alkalmazás osztály (application class) látja el kezeli a felhasználói bevitelt, a felület elemeit, beállítja az alkalmazástulajdonságokat (megjelenés, elérési útvonal,...) a Qt-ben az alkalmazást a QApplication típus biztosítja ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:16

Eseménykezelés A grafikus felületen tehát számos módon és ponton kezdeményezhetünk interakciót a programmal A program által kezelhető, lereagálható interakciókat nevezzük eseményeknek (event/signal), az interakció kezdeményezését nevezzük az esemény kiváltásának pl.: gombra kattintás, egér húzás, listaelem kiválasztás gombra kattintás egér húzás ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:17

Eseménykezelés Az eseménynek van: küldője (sender): kiváltja az eseményt, pl. gomb, lista körülményei (arguments): meghatározza az esemény paramétereit, pl. egér pozíciója a húzáskor, kiválasztott listaelem indexe küldő: gomb körülmény: nincs küldő: adott vezérlő körülmény: egérpozíció gombra kattintás egér húzás ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:18

Eseménykezelés Az eseményekre reagálva a program futtathat egy alprogramot, ezt nevezzük eseménykezelőnek (event handler/slot) ha nem biztosítunk eseménykezelőt az eseményhez, akkor az lekezeletlen marad tevékenység tevékenység küldő: gomb körülmény: nincs küldő: adott vezérlő körülmény: egérpozíció gombra kattintás egér húzás ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:19

Eseménykezelés Az összetett események úgy valósulnak meg, hogy a program egy egyszerű eseményre kivált egy másikat pl.: az egérrel kattintunk, és az egér a gombon van, akkor kiváltódik a gomb kattintása esemény tehát az eseménykezelés egy több lépcsős, ciklikus folyamat esemény kiváltás küldő, körülmények esemény kezelés ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:20

Eseménykezelő társítás Az eseménykezeléshez összekapcsoljuk az eseményt az eseménykezelővel, ezt társításnak nevezzük Qt-ban ehhez a connect metódust használjuk, pl.: connect(&button, SIGNAL(clicked()), &app, SLOT(quit())); megadjuk, mely küldő objektum (sender) mely eseményére (SIGNAL) mely fogadó objektum (receiver) mely eseménykezelője (SLOT) kell, hogy fusson mindig mutatókat adunk meg, bármely két alkalmas objektum összeköthető a kötés elvégezhető QObject leszármazott típusban, illetve statikus metódus hivatkozással ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:21

Eseménykezelő társítás #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]){ QApplication app(argc, argv); // alkalmazás QPushButton quit("quit"); // gomb quit.resize(75, 30); // méret quit.setfont(qfont("times", 18, QFont::Bold)); // betűtípus QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit())); quit.show(); // gomb megjelenítése return app.exec(); } ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 1:22