elemialkalmazások fejlesztése iv. adatbáziskezelő ... bemutato.pdffile/new connection.cpp...
TRANSCRIPT
![Page 1: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/1.jpg)
1
Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.Elemi alkalmazások fejlesztése IV.
Adatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őAdatbáziskezel őalkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése alkalmazás készítése
QtDesignerbenQtDesignerben
Készítette: Szabóné Nacsa Rozália
![Page 2: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/2.jpg)
2
““““““““““Származtatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezet
Qt
U form.h
formbase.cpp main.cpp
form.ui
Írás, olvasásOlvasásGenerálás#includesEszköz (tool)Generált forráskódFelhasználó forráskódja
formbase.h
form.cpp
Örö
kldé
ső
A formbase.h és a formbase.cpp minden módosításnál újra generálódik. Az alkalmazásspecifikus funkciókat a származtatott osztályban adjuk meg.
![Page 3: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/3.jpg)
3
““““““““““Származtatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezetSzármaztatásos” modulszerkezet
Qt
U form.h
formbase.cpp main.cpp
form.ui
Írás, olvasásOlvasásGenerálás#includesEszköz (tool)Generált forráskódFelhasználó forráskódja
formbase.h
form.cpp
Örö
kldé
ső
Kiküszöbölhetnénk az örökl dést, ha úgy őtudnánk beleírni a formbase.h és
formbase.cpp fájlokba, hogy a generálás a kiegészítést nem rontaná el.
“saját”
“saját”
![Page 4: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/4.jpg)
4
““““““““““ui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezetui.h”-s modulszerkezet
Qt designer
U
form.cpp main.cpp
form.ui
Írás, olvasásOlvasásGenerálás#includesEszköz (tool)Generált forráskódFelhasználó forráskódja
form.h
form.ui
form.ui.h
Az alkalmazásspecifius funkciókat a form.ui.h implementációs fájlban
adjuk meg.
![Page 5: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/5.jpg)
5
A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai A QtDesigner ablakai
Toolbox
ProjectOverview
ObjectExplorer Properties Editor/Signal Handlers
![Page 6: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/6.jpg)
6
FeladatFeladatFeladatFeladatFeladatFeladatFeladatFeladatFeladatFeladat
Új csoportok felvétele, bejegyzett csoportok módosítása, törlése.
![Page 7: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/7.jpg)
7
Feladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépéseiFeladat – a megvalósítás lépései
Új csoportok felvétele, bejegyzett csoportok módosítása, törlése.
1
2
3 F ablak + félév tábla létrehozásaő Csoport tábla elkészítése Gombok hozzáadása, dialógus elkészítése
![Page 8: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/8.jpg)
8
FelevDataTable(QDataTable)
primeInsert()beforeUpdate()
currentChanged()beforeInsert()
CsoportDataTable(QDataTable)
primeInsert()cursorChanged()
EditPushButton(QPushButton)
clicked()
QuitPushButton(QPushButton)
clicked()
CsoportRegistrationForm(QDialog)
EditCsoportForm(QDialog)
A CsoportRegistrationForm osztálydiagramja
![Page 9: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/9.jpg)
9
Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása:Új projekt létrehozása: File/New/C++ Project File/New/C++ Project
![Page 10: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/10.jpg)
10
Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: Project Overview: csopreg.procsopreg.pro
![Page 11: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/11.jpg)
11
Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...Project/Database connections ...
1
2
3
4
5
![Page 12: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/12.jpg)
12
Projekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolásaProjekt és adatbázis leíró tárolása
Adatbázist leíró XML fájl
A projektet leíró text fájl
![Page 13: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/13.jpg)
13
connectionconnection modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása modul létrehozása
File/New connection.cpp
File/New connection.h
Az alkalmazás adatbáziskapcsolatát nekünk kell kiépíteni.
![Page 14: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/14.jpg)
14
#define DB_SOURCE_DRIVER "QMYSQL3"#define DB_SOURCE_DBNAME "eaf"#define DB_SOURCE_USER "nacsa"#define DB_SOURCE_PASSWD "1234"#define DB_SOURCE_HOST "localhost"bool createConnections();
#include <qsqldatabase.h> #include "connection.h" bool createConnections() { QSqlDatabase *source = QSqlDatabase::addDatabase( DB_SOURCE_DRIVER); source->setDatabaseName( DB_SOURCE_DBNAME ); source->setUserName( DB_SOURCE_USER ); source->setPassword( DB_SOURCE_PASSWD ); source->setHostName( DB_SOURCE_HOST ); if ( ! source->open() ) { qWarning( "Az adatbázist nem sikerült megnyitni: " + source->lastError().driverText() ); qWarning( source->lastError().databaseText() ); return FALSE; } return TRUE; }
connection.cpp
connection.h
![Page 15: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/15.jpg)
15
CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: CsoportRegistrationForm: létrehozás létrehozás
File/New/Dialog
![Page 16: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/16.jpg)
16
F program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: őF program létrehozása: ő main.cppmain.cpp
File/New
A QtDesigener automatikusan felajánlja a f ablakot.ő
![Page 17: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/17.jpg)
17
main.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változatmain.cpp: generált változat
A main.cpp nem tartalmazza az alkalmazás adatbáziskapcsolatát.
![Page 18: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/18.jpg)
18
main.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változatmain.cpp: módosított változat
#include <qapplication.h>#include "csoportregistrationform.h"#include "connection.h"int main( int argc, char ** argv ){ QApplication app( argc, argv );
if (!createConnections())return 1;
CsoportRegistrationForm csopRegForm; csopRegForm.show(); app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) ); return app.exec();}
Az alkalmazás adatbáziskapcsolatát nekünk kell megvalósítani.
![Page 19: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/19.jpg)
19
ProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítéseProjectOveview felépítése
A QtDesigner Project/Overview
ablaka
![Page 20: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/20.jpg)
20
A Config-ban szerepelnie kell
thread opciónak.
A Qt 3-ban külön be kell állítani!
![Page 21: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/21.jpg)
21
A A A A A A A A A A felevfelev tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű tábla ráhelyezése az rlapraű
1
2
3
Válassza ki a CsoportRegistration
Form rlapot!ű
Válassza ki a DataTable eszközt!
Kattintson az rlapra!ű
![Page 22: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/22.jpg)
22
Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Choose the Database and TableChoose the Database and Table
Adjuk meg, hogy az adatbázis felev táblájával szeretnénk
dolgozni.
![Page 23: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/23.jpg)
23
Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Displayed FieldsDisplayed Fields
![Page 24: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/24.jpg)
24
Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Table PropertiesTable Properties
![Page 25: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/25.jpg)
25
Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: SQLSQL
![Page 26: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/26.jpg)
26
Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: FinishFinish
![Page 27: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/27.jpg)
27
Lay Out in a Grid
Ctrl+T
Tesztelés a QtDesigner
adatbáziskezel jével.ő
FelevDataTable
![Page 28: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/28.jpg)
28
CsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaőCsoportRegistrationForm: Els változat futtatásaő
Új csoport felvitelekor a háttérben meghúzódó felev_id nem kap
értéket.
Nincs adatellen rzés.ő
mysql> select * from felev;
+----------+------+-------------+------+------+
| felev_id | szam | kezdet | fsz | max |
+----------+------+-------------+------+------+
| 37 | 4 | 2002/2003-2 | 4 | 8 |
| 38 | 3 | 2002/2003-2 | 4 | 1 |
| 39 | 2 | 2000/2001-1 | 4 | 0 |
| 40 | 4 | 2003/2004-1 | 4 | 4 |
| 61 | 1 | 2003/2004-1 | 4 | 1 |
| 0 | 10 | xxxxxxx | 10 | 10 |
+----------+------+-------------+------+------+
6 rows in set (0.00 sec)
Ha még egy rekordot be szeretnénk szúrni, akkor hibaüzenetet
kapunk.
![Page 29: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/29.jpg)
29
FelevDataTable(QDataTable)
primeInsert()beforeUpdate()beforeInsert()
currentChanged()
CsoportRegistrationForm(QDialog)
slotPrimeInsertFelev()slotBeforeUpdateFelev()slotCurrentChangedFelev()
Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok
slotPrimeInsertFelev(): sorszám kiosztásaslotBeforeUpdate()Felev: adatellen rzésőslotCurrentChangedFelev(): helyi menü állapota
![Page 30: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/30.jpg)
30
slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()slotPrimeInsertFelev()
A felev táblában a slotPrimeInsertFelev()
slotban kezeljuk a sorszám kiosztását.
1
2
![Page 31: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/31.jpg)
31
Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../Edit/Slots.../slotPrimeInsertFelev()slotPrimeInsertFelev()
1
2
3
slotPrimeInsertFelev(QSqlRecord* buffer)
![Page 32: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/32.jpg)
32
csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()csoportregistrationform.ui.h: slotPrimeInsertFelev()
Forrásprogram szerkesztő
csoportregistrationform.ui.h
A kódot nekünk kell begépelni.
![Page 33: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/33.jpg)
33
slotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kódslotPrimeInsertFelev(): kód
void CsoportRegistrationForm::slotPrimeInsertFelev( QSqlRecord *buffer ){ // felev_id kitöltése a következ sorszámmalő QSqlQuery query; query.exec("UPDATE sequence Set sequence = sequence + 1 WHERE tablename = 'felev';"); query.exec("SELECT sequence from sequence where tablename = 'felev';"); if (query.next() ) {
buffer->setValue("felev_id", query.value(0)); }
//Kezdetiértékek beállítása buffer->setValue("szam",1); buffer->setValue("fsz",4); buffer->setValue("kezdet","2003/2004-1"); buffer->setValue("max",20);}
![Page 34: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/34.jpg)
34
Signal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítéseSignal / slot kapcsolat kiépítése
1
2
![Page 35: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/35.jpg)
35
Sender: FelevDataTable
Signal: primeInsert(QSqlrecord*)
![Page 36: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/36.jpg)
36
Receiver: CsoportRegistrationForm
Slot: slotPprimeInsertFelev(QSqlrecord*)
Sender: FelevDataTableSignal: primeInsert(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: slotPrimeInsertFelev(QSqlRecord* buffer)
![Page 37: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/37.jpg)
37
A csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájlA csopreg.pro fájl
SOURCES += connection.cpp \ main.cpp
HEADERS += connection.hunix { UI_DIR = .ui MOC_DIR = .moc OBJECTS_DIR = .obj}FORMS = csoportregistrationform.uiTEMPLATE =appCONFIG += qt warn_on release threadDBFILE = csopreg.dbLANGUAGE = C++
A projektet leíró fájl tartalma
![Page 38: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/38.jpg)
38
Fordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/SzerkesztésFordítás/Szerkesztés
qmake -o Makefile csopreg.promake
![Page 39: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/39.jpg)
39
Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: Futtatás: ./csopreg./csopreg
mysql> select * from felev;
+----------+------+-------------+------+------+
| felev_id | szam | kezdet | fsz | max |
+----------+------+-------------+------+------+
| 37 | 4 | 2002/2003-2 | 4 | 8 |
| 38 | 3 | 2002/2003-2 | 4 | 1 |
| 39 | 2 | 2000/2001-1 | 4 | 0 |
| 40 | 4 | 2003/2004-1 | 4 | 4 |
| 61 | 1 | 2003/2004-1 | 4 | 1 |
| 67 | 1 | 2003/2004-2 | 4 | 20 |
+----------+------+-------------+------+------+
6 rows in set (0.00 sec)
A felev_id sorszámot
kapott.
Beszúrásnál felajánlja a kezdetiértékeket.
![Page 40: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/40.jpg)
40
Adatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: őAdatellen rzés: ő slotBeforeUpdateFelev()slotBeforeUpdateFelev()
Miel tt az adatokat visszaírjuk őaz adatbázisba, ellen rizzünk.ő
(slotBeforeUpdateFelev())
1
2
3
![Page 41: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/41.jpg)
41
csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h:csoportregistrationform.ui.h: slotBeforeUpdateFelev() slotBeforeUpdateFelev()
![Page 42: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/42.jpg)
42
void CsoportRegistrationForm::slotBeforeUpdateFelev( QSqlRecord * buffer ) {// A max mez értéke nem mehet a létez csoportszám alá ő őQSqlQuery query; int foglalt=0; query.exec( "SELECT count(*) FROM csoport WHERE felev_id=" + buffer->value("felev_id").toString() + ";" ); if (query.next()) foglalt = query.value(0).toInt(); if(buffer->value("max").toInt() < foglalt) { buffer->setValue("max",foglalt);
QString q = "A maximális csoportszám\n nem lehet kisebb\n a már bejegyzett csoportok számánál! \n Eddig " + QString::number(foglalt) + " db csoport lett bejegyezve."; QMessageBox::information( this, "Félév Regisztráció", q ); } . . .}
slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1slotBeforeUpdateFelev(): kód - 1
![Page 43: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/43.jpg)
43
void CsoportRegistrationForm::slotBeforeUpdateFelev( QSqlRecord * buffer ){ . . . //A szám mez értéke 1-4 közé es szám ő ő if(buffer->value("szam").toInt() < 1 || buffer->value("szam").toInt() > 4) {
QMessageBox::information( this, "Félév Regisztráció", "A szám oszlopban csak 1,2,3,4 szerepelhet!"); buffer->setValue("szam",4); }
//A feladatok száma maximum 4 if(buffer->value("fsz").toInt() > 4) {
QMessageBox::information( this, "Félév Regisztráció", "A feladatok száma maximum 4 lehet !"); buffer->setValue("fsz",4); }}
slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2slotBeforeUpdateFelev(): kód - 2
![Page 44: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/44.jpg)
44
Signal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítéseSignal / Slot kiépítése
Sender: FelevDataTableSignal: beforeUpdate(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: slotBeforeUpdateFelev(QSqlRecord* buffer)
Sender: FelevDataTableSignal: beforeInsert(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: slotBeforeUpdateFelev(QSqlRecord* buffer)
![Page 45: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/45.jpg)
45
Fordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/Futtatás
qmake./csopreg
![Page 46: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/46.jpg)
46
Környezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüőKörnyezetfügg helyi menüő
A helyi menüben csak azokat a menüpontokat
engedélyezzük, amelyeknek értelme van.
![Page 47: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/47.jpg)
47
slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): létrehozáslétrehozás
slotCurrentChangedFelev(QSqlRecord *buffer)
Edit/Slots...
A slotCurrentChangedFelev() slotban állítjuk be a helyi menü aktuális
állapotát.
![Page 48: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/48.jpg)
48
slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()slotCurrentChangedFelev()Function: slotCurrentChangedFelev(QSqlRecord *buffer)Return type: voidSpecifier: virtualAccess: publicType: slot
public slots:virtual void slotCurrentChangedFelev(QSqlrecord*)
csoportregistrationform.h
void slotCurrentChangedFelev(QSqlrecord* buffer){}
csoportregistrationform.ui.h
csoportregistrationform.ui
<slots> . . . <slot>slotCurrentChangedFelev( QsQlRecord * buffer )</slot></slots>
QtDesignerQtDesigner
moc
![Page 49: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/49.jpg)
49
slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - slotCurrentChangedFelev() - Object ExplorerObject Explorer
Kód beírása
![Page 50: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/50.jpg)
50
slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): kódkódvoid CsoportRegistrationForm::slotCurrentChangedFelev( QSqlRecord *buffer ){ if (!buffer) return; int count=0; QSqlQuery query("SELECT count(*) FROM felev;") ; if (query.next()) count = query.value(0).toInt(); if (count==0){ FelevDataTable->sqlCursor()->setMode( QSqlCursor::Insert); return; }
int foglalt=0; query.exec( "SELECT count(*) FROM csoport WHERE felev_id=" + buffer->value("felev_id").toString() + ";" ); if (query.next()) foglalt = query.value(0).toInt(); if ( foglalt == 0 ) { FelevDataTable->sqlCursor()-> setMode( QSqlCursor::Insert | QSqlCursor::Delete | QSqlCursor::Update ); }else { FelevDataTable->sqlCursor()->setMode( QSqlCursor::Insert | QSqlCursor::Update ); }}
Ha a felev tabla üres, akkor csak insert.
Van már bejegyzett csoport az adott
félévre?
![Page 51: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/51.jpg)
51
slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): slotCurrentChangedFelev(): signal/slot kapcsolatsignal/slot kapcsolat
Sender: FelevDataTableSignal: currentChanged(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: slotcurrentChangedFelev(QSqlRecord* buffer)
![Page 52: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/52.jpg)
52
Fordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/FuttattásFordítás/Futtattás
Ebben a félévben már van bejegyzett csoport.
![Page 53: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/53.jpg)
53
2. lépés2. lépés2. lépés2. lépés2. lépés2. lépés2. lépés2. lépés2. lépés2. lépés
![Page 54: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/54.jpg)
54
A csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezéseA csoport tábla elhelyezése
F ablak + félév tábla létrehozásaő Csoport tábla Gombok hozzáadása, dialógus elkészítése
FelevDataTable
CsoportDataTable
A feladat második lépéseként helyezzük el a csoport táblát az
rlapon, majd “kapcsoljuk űössze” a két táblát.
�
![Page 55: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/55.jpg)
55
FelevDataTable(QDataTable)
primeInsert()beforeUpdate()beforeInsert()
currentChanged()
CsoportDataTable(QDataTable)
primeInsert()
CsoportRegistrationForm(QDialog)
slotPrimeInsertFelev()slotBeforeUpdateFelev()
slotCurrentChangedFelev()newCurrentFelev()
slotPrimeInsertCsoport()
init()
Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok Signálok és slotok
newCurrentFelv(): csoport tábla fissítéseslotPrimeInsertCsoport(): csoport_id beállítása
![Page 56: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/56.jpg)
56
A CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezéseA CsoportDataTable átméretezése
Töröljük a korábbi elrendezést (Break Layout), és méretezzük át
a félév táblát!
![Page 57: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/57.jpg)
57
A FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezéseA FelevDataTable elhelyezése
Válaszoljon a Data Table Wizard kérdéseire.
A Data Table eszköz kiválasztása után kattintson
az rlapra, majdű
![Page 58: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/58.jpg)
58
Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Choose Database and TableChoose Database and Table
A projekt adatbáziskapcsolata már létezik (csopreg.pro), ezért itt már csak a jelszót
kérdezi.
![Page 59: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/59.jpg)
59
Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Displayed FieldsDisplayed Fields
![Page 60: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/60.jpg)
60
Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Table PropertiesTable Properties
![Page 61: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/61.jpg)
61
Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: SQLSQL
![Page 62: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/62.jpg)
62
Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: Data Table Wizard: FinishFinish
![Page 63: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/63.jpg)
63
Táblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezéseTáblák elrendezése
Jelöljök ki mindkét táblát!
A második tábla neve: CsoportDataTable
![Page 64: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/64.jpg)
64
newCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connectionsnewCurrentFelev(): slot + connections
Ha új sort – új rekordot – választunk a felev táblában, akkor a csoport táblát frissíteni kell.
Edit/Connections/New
Edet/Slots.../New Function
Function: newCurrentFelev(QSqlRecord *buffer)Return type: voidSpecifier: virtualAccess: publicType: slot
Sender: FelevDataTableSignal: currentChanged(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: newCurrentFelev(QSqlRecord* buffer)
![Page 65: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/65.jpg)
65
newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): newCurrentFelev(): kódkód
void CsoportRegistrationForm::newCurrentFelev( QSqlRecord * buffer ){ CsoportDataTable->setFilter("felev_id=" +buffer->value("felev_id").toString()) ; CsoportDataTable->refresh();}
![Page 66: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/66.jpg)
66
slotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connectionsslotPrimeInsertCsoport(): slot + connections
Ha új sort – új rekordot – szúrunk be a csoport táblában, akkor a csoport_id és a felev_id értékeket
nekünk kell kitölteni a segéd pufferben. Ezt valósítjuk meg ebben a slotban.
Sender: CsoportDataTableSignal: primeInsert(QSqlRecord*)Receiver: CsoportRegistrationFormSlot: slotPrimeInsertCsoport(QSqlRecord* buffer)
Edit/Connections/New
Edet/Slots.../New Function
Function: slotPrimeInsertCsoport(QSqlRecord *buffer)Return type: voidSpecifier: virtualAccess: publicType: slot
![Page 67: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/67.jpg)
67
slotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kódslotPrimeInserCsoport(): kód
void CsoportRegistrationForm::slotPrimeInsetCsoport( QSqlRecord * buffer ){//csoport_id lekérdezéseQSqlQuery query; query.exec("UPDATE sequence Set sequence = sequence + 1 where tablename = 'csoport';"); query.exec("SELECT sequence from sequence where tablename = 'csoport';"); if (query.next() ) {
buffer->setValue("csoport_id", query.value(0)); }
//felev_id kitöltése buffer->setValue("felev_id", FelevDataTable->currentRecord()->value("felev_id"));
//Kezdetiértékek beállítása buffer->setValue("max",30); }
![Page 68: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/68.jpg)
68
Fordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/Futtatás
Indulásnál a sz r még nem ű őm ködik.ű
A konstruktorban kellene sz rni.űAz “ui.h”-s technikában az init()
függvényben adjuk meg a “konstruktor”-beli teend ket.ő
?
Itt még nem m ködik a űsz rés.ű
Ez lenne a jó tábla.
![Page 69: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/69.jpg)
69
CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - init():init():init():init():init():init():init():init():init():init(): létrehozás létrehozás
![Page 70: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/70.jpg)
70
CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - CsoportRegistrationForm inicializálása - init():init():init():init():init():init():init():init():init():init(): kód kód
void CsoportRegistrationForm::init(){if (FelevDataTable && CsoportDataTable && FelevDataTable->numRows() >0) { FelevDataTable->selectRow(0);
slotCurrentChangedFelev(FelevDataTable->currentRecord());CsoportDataTable->setFilter("felev_id="
+ FelevDataTable->currentRecord()->value("felev_id").toString());CsoportDataTable->refresh();if (CsoportDataTable->numRows()>0) CsoportDataTable->selectRow(0);
}}
![Page 71: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/71.jpg)
71
3. rész3. rész3. rész3. rész3. rész3. rész3. rész3. rész3. rész3. rész
![Page 72: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/72.jpg)
72
A csoportokat egy önálló dialógusablakban
szeretnénk szerkeszteni.
F ablak + félév tábla létrehozásaő Csoport tábla Gombok hozzáadása, dialógus elkészítése
![Page 73: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/73.jpg)
73
A CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaűA CsoportRegistrationForm rlap módosításaű
CsoportDataTable
FelevDataTable
EditPushButtonQuitPushButton
editClicked() slot
![Page 74: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/74.jpg)
74
FelevDataTable(QDataTable)
primeInsert()beforeUpdate()beforeInsert()
currentChanged()
CsoportDataTable(QDataTable)
primeInsert()cursorChanged()
EditPushButton(QPushButton)
clicked()
QuitPushButton(QPushButton)
clicked()
CsoportRegistrationForm(QDialog)
slotPrimeInsertFelev()slotBeforeUpdateFelev()
slotCurrentChangedFelev()newCurrentFelev()
slotPrimeInsertCsoport()slotCursorChangedCsoport()
editClicked()
accept()
init()
EditCsoportForm(QDialog)
setFelevId()
felevId()
int _felev_id;
Signálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotok
editClicked()dialog->setSqlCursor()dialog->setFilter()dialog->setSort()dialog->setFelevId()
newCurrentFelev(): ésslotCursorChangedCsoport():Szerkesztés gomb frissítése
![Page 75: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/75.jpg)
75
A “A “A “A “A “A “A “A “A “A “KKilépésilépés” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat” gomb eseménykezelése: signál/slot kapcsolat
Sender: QuitPushButtonSignal: clicked()Receiver: CsoportRegistrationFormSlot: accept()
![Page 76: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/76.jpg)
76
EditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablakEditCsoportForm dialógusablak
![Page 77: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/77.jpg)
77
EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: EditCsoportForm dialógus: létrehozásalétrehozása
File/New/dialog
Caption: Csoport tábla szerkesztése
name: EditCsoportForm
Save As: editcsoportform.ui
![Page 78: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/78.jpg)
78
![Page 79: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/79.jpg)
79
![Page 80: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/80.jpg)
80
![Page 81: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/81.jpg)
81
![Page 82: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/82.jpg)
82
![Page 83: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/83.jpg)
83
![Page 84: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/84.jpg)
84
![Page 85: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/85.jpg)
85
CsoportDataBrowserAz adatreprezentáló
cursort mi adjuk meg!!
1
2
![Page 86: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/86.jpg)
86
Az EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítéseAz EditCsoportForm felépítése
LabelKezdet
LabelSzint
ComboBoxGyakvez
EditCsoportForm
CsoportDataBrowser
QLineEditNev
QSpinBoxMax
QSpinBoxGyakvez_id
PushButtonLast
![Page 87: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/87.jpg)
87
Új adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztéseÚj adattag beillesztése
int _felev_id;
Az EditCsoportForm-ot
kell kiválasztani!1
2
3
![Page 88: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/88.jpg)
88
A felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: őA felev_id adattagot kezel függvények: ő létrehozáslétrehozás
Function: felevId()Return type: intSpecifier: non virtualAccess: publicType: function
Function: setFfelevId(int felev_id )Return type: voidSpecifier: non virtualAccess: publicType: function
![Page 89: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/89.jpg)
89
A _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: őA _felev_id adattagot kezel függvények: ő kódkód
int EditCsoportForm::felevId(){ return _felev_id;}
void EditCsoportForm::setFelevId( int felev_id ){ _felev_id=felev_id; QSqlQuery query("SELECT kezdet,szam FROM felev WHERE felev_id=" +
QString::number(_felev_id) + ";"); if (query.next()) {
LabelKezdet->setText(query.value(0).toString());LabelSzint->setText("EAF" + query.value(1).toString());
}}
![Page 90: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/90.jpg)
90
A “A “A “A “A “A “A “A “A “A “SSzerkesztészerkesztés” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - ” gomb slotja - editClicked() slot editClicked() slot
Edit/Slots
Edit/Connections
Function:editClicked() Return type: voidSpecifier: virtualAccess: publicType: slot
sender: EditPushButtonsignal: clicked()receiver: CsoportRegistrationFormslot: editClicked()
![Page 91: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/91.jpg)
91
EditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kódEditClicked() slot: kód
void CsoportRegistrationForm::editClicked(){ EditCsoportForm *dialog = new EditCsoportForm( this, "Edit Csoport Form", TRUE ); QSqlCursor cursor( "csoport" ); dialog->CsoportDataBrowser->setSqlCursor( &cursor ); dialog->CsoportDataBrowser->setFilter( CsoportDataTable->filter() ); dialog->CsoportDataBrowser->setSort(QSqlIndex::fromStringList( CsoportDataTable->sort(), &cursor ) ); dialog->CsoportDataBrowser->refresh(); int i = CsoportDataTable->currentRow(); if ( i == -1 ) i = 0; // Always use the first row CsoportDataTable->selectRow(i); dialog->setFelevId(CsoportDataTable->currentRecord()->value("felev_id").toInt()); dialog->CsoportDataBrowser->seek( i ); dialog->exec(); delete dialog; CsoportDataTable->refresh(); if (CsoportDataTable->numRows()==0) EditPushButton->setEnabled(FALSE); else EditPushButton->setEnabled(TRUE);}
Az implementációban hivatkozunk az EditCsoportForm és a CsoportDataBrowser osztályokra, ezért ezek header fájljait be kell
illeszteni a projektbe.
![Page 92: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/92.jpg)
92
Header fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztéseHeader fájlok beillesztése
Kattintson az egér jobb fülére, majd válassza ki a
New menüpontot.
A ProjectOverview ablakban válassza ki a
CsoportRegistrationForm-ot!
1
2
![Page 93: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/93.jpg)
93
Fordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/FuttatásFordítás/Futtatás
![Page 94: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/94.jpg)
94
A A A A A A A A A A SSzerkesztészerkesztés gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása gomb engedélyezése/tíltása
Edit/Slots
Edit/Connections
Function: slotCursorChangedCsoport() Return type: voidSpecifier: virtualAccess: publicType: slot
sender: CsoportDataTablesignal: cursorChanged(QSql::Op)receiver: CsoportRegistrationFormslot: slotCursorChangedCsoport()
![Page 95: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/95.jpg)
95
A newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosításaA newCurrentFelev() slot módosítása
void CsoportRegistrationForm::newCurrentFelev( QSqlRecord * buffer ){ CsoportDataTable->setFilter("felev_id=" +buffer->value("felev_id").toString()) ; CsoportDataTable->refresh();
if (CsoportDataTable->numRows()>0) CsoportDataTable->selectRow(0); if (CsoportDataTable->numRows()==0) EditPushButton->setEnabled(FALSE); else EditPushButton->setEnabled(TRUE);
}
![Page 96: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/96.jpg)
96
Az init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosításaAz init() módosítása
void CsoportRegistrationForm::init(){ if (FelevDataTable && CsoportDataTable && FelevDataTable->numRows() >0) { FelevDataTable->selectRow(0);
slotCurrentChangedFelev(FelevDataTable->currentRecord());CsoportDataTable->setFilter("felev_id="
+ FelevDataTable->currentRecord()->value("felev_id").toString());CsoportDataTable->refresh();if (CsoportDataTable->numRows()>0) CsoportDataTable->selectRow(0);if (CsoportDataTable->numRows()==0) EditPushButton->setEnabled(FALSE);else EditPushButton->setEnabled(TRUE);
}}
![Page 97: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/97.jpg)
97
Az EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztályAz EditCsoportForm osztály további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai további függvényei és slotjai
Önálló feldolgozásra
![Page 98: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/98.jpg)
98
EditCsoportForm(QDialog)
slotFelevId()slotPrimeInsert()
slotPrimeUpdate()slotGyakvezChanged()
init()
felevId()
int _felev_id;
CsoportDataBrowser(QDataBrowser)
primeInsert()primeUpdate()
init()
LabelKezdet(QLabel)
LabelSzint(QLabel)
ComboBoxGyakvez(QComboBox)
QLineEditNev(QLineEdit)
QSpinBoxMax(QSpinBox)
QSpinBoxGyakvez_id(QSpinBox)
activated()
PushButtonFirst(QPushButtonl)
PushButtonClose(QPushButton)
setFelevId()LabelSzint->setText()LabelKezdet->setText()
Signálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotokSignálok és slotok
![Page 99: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/99.jpg)
99
EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: init()init()
void EditCsoportForm::init(){ QSqlQuery query ("SELECT nev FROM gyakvez ORDER BY nev;"); while (query.next())
ComboBoxGyakvez->insertItem(query.value(0).toString());}
A gyakorlatvezet nevét őtartalmazó ComboBox
kitöltése
![Page 100: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/100.jpg)
100
EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: slotPrimeInsert()slotPrimeInsert()
void EditCsoportForm::slotPrimeInsert( QSqlRecord * buffer ){ QSqlQuery query; query.exec("UPDATE sequence Set sequence = sequence + 1 where tablename = 'csoport';"); query.exec("SELECT sequence from sequence where tablename = 'csoport';"); if (query.next() ) {
buffer->setValue("csoport_id", query.value(0)); } buffer->setValue("felev_id", QString::number(_felev_id));}
Edit/Connections
sender: CsoportDataBrowsersignal: primeInsert(QSqlRecord*)receiver: EditCsoportFormslot: slotPrimeInsert(QSqlRecord*)
Edit/Slots/New Function/implementáció begépelése
![Page 101: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/101.jpg)
101
EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: slotPrimeUpdate() - 1slotPrimeUpdate() - 1
void EditCsoportForm::slotPrimeUpdate( QSqlRecord * buffer ){ if (!buffer) return; //Ki a gyakorlatvezetö QString q="SELECT nev FROM gyakvez WHERE gyakvez_id='" + buffer->value("gyakvez_id").toString() + "';"; QSqlQuery query (q); QString gyakvez = ""; if (query.next())
gyakvez=query.value(0).toString(); //Állítsuk be a gyakvez ComboBox értékét for (int i=0; i < ComboBoxGyakvez->count(); i++) {
if (ComboBoxGyakvez->text(i)==gyakvez) { ComboBoxGyakvez->setCurrentItem(i); break;}
} . . .}
Edit/Slots/New Function/implementáció begépelése
![Page 102: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/102.jpg)
102
EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: slotPrimeUpdate() - 2slotPrimeUpdate() - 2
void EditCsoportForm::slotPrimeUpdate( QSqlRecord * buffer ){ . . . //Állítsuk be a max Spin box minimális értékét int foglalt=0; query.exec( "SELECT count(*) FROM tag WHERE csoport_id=" + buffer->value("csoport_id").toString() + ";" ); if (query.next()) foglalt = query.value(0).toInt(); QSpinBoxMax->setMinValue(foglalt);}
Edit/Connections
sender: CsoportDataBrowsersignal: primeUpdate(QSqlRecord*)receiver: EditCsoportFormslot: slotPrimeUpdate(QSqlRecord*)
Edit/Slots/New Function/implementáció begépelése
![Page 103: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/103.jpg)
103
EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: EditCsoportForm: Header fájlok beillesztéseHeader fájlok beillesztése
1
2
A slotPrimeUpdate() slot deklarációs és definíciós részében is hivatkozunk a QSqlRecord osztályra.
3
class QSqlRecord;. . .public slots:void slotPrimeUpdate(QSqlRecord* buffer). . .
#include <qsqlrecord.h>. .void slotPrimeUpdate(QSqlRecord* buffer) {
}
editcsoportform.h
editcsoportform.cpp
![Page 104: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/104.jpg)
104
EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: EditCsoportForm:: slotGyakvezChanged()slotGyakvezChanged()
void EditCsoportForm::slotGyakvezChanged( const QString & g ){ //Mi a gyakorlatvezetö id-je? QString q="SELECT gyakvez_id FROM gyakvez WHERE nev='" + g + "';"; QSqlQuery query (q); if (query.next())
QSpinBoxGyakvez_id->setValue(query.value(0).toInt()); CsoportDataBrowser->update();}
Edit/Connections
sender: ComboBoxGyakvezsignal: activated(const QString &)receiver: EditCsoportFormslot: slotGyakvezChanged(const QString &)
Edit/Slots/New Function/implementáció begépelése
Ha új gyakorlatvezet t őválasztottunk, akkor a névhez
tartozó gyakvez_id-t kell megjeleníteni a vezérl n.ő
![Page 105: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/105.jpg)
105
VégeVégeVégeVégeVégeVégeVégeVégeVégeVége
![Page 106: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/106.jpg)
106
FelevDataTable(QDataTable)
primeInsert()beforeUpdate()
currentChanged()beforeInsert()
CsoportDataTable(QDataTable)
primeInsert()cursorChanged()
EditPushButton(QPushButton)
clicked()
QuitPushButton(QPushButton)
clicked()
CsoportRegistrationForm(QDialog)
slotPrimeInsertFelev()slotBeforeUpdateFelev()
slotCurrentChangedFelev()newCurrentFelev()
slotPrimeInsertCsoport()slotCursorChangedCsoport()
editClicked()
accept()
init()
EditCsoportForm(QDialog)
slotFelevId()slotPrimeInsert()
slotPrimeUpdate()slotGyakvezChanged()
init()
felevId()
int _felev_id;
A projekt osztálydiagramja -1
![Page 107: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/107.jpg)
107
EditCsoportForm(QDialog)
slotFelevId()slotPrimeInsert()
slotPrimeUpdate()slotGyakvezChanged()
init()
felevId()
int _felev_id;
CsoportDataBrowser(QDataBrowser)
primeInsert()primeUpdate()
init()
LabelKezdet(QLabel)
LabelSzint(QLabel)
ComboBoxGyakvez(QComboBox)
QLineEditNev(QLineEdit)
QSpinBoxMax(QSpinBox)
QSpinBoxGyakvez_id(QSpinBox)
PushButtonFirst(QPushButtonl)
PushButtonClose(QPushButton)
CsoportRegistrationForm(QDialog)
A projekt osztálydiagramja -2
![Page 108: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/108.jpg)
108
FelevDataTable(QDataTable)
primeInsert()beforeUpdate()beforeInsert()
currentChanged()
CsoportDataTable(QDataTable)
primeInsert()cursorChanged()
EditPushButton(QPushButton)
clicked()
QuitPushButton(QPushButton)
clicked()
CsoportRegistrationForm(QDialog)
slotPrimeInsertFelev()slotBeforeUpdateFelev()
slotCurrentChangedFelev()newCurrentFelev()
slotPrimeInsertCsoport()slotCursorChangedCsoport()
editClicked()
accept()
init()
EditCsoportForm(QDialog)
setFelevId()slotPrimeInsert()
slotPrimeUpdate()slotGyakvezChanged()
init()
felevId()
int _felev_id;
Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1Signálok és slotok - 1
editClicked()dialog->setSqlCursor()dialog->setFilter()dialog->setSort()dialog->setFelevId()
![Page 109: Elemialkalmazások fejlesztése IV. Adatbáziskezelő ... bemutato.pdfFile/New connection.cpp File/New connection.h Azalkalmazás adatbáziskapcsolatát nekünkkellkiépíteni. 14](https://reader035.vdocuments.net/reader035/viewer/2022071410/61052b2f85cfd5738e008022/html5/thumbnails/109.jpg)
109
EditCsoportForm(QDialog)
setFelevId()slotPrimeInsert()
slotPrimeUpdate()slotGyakvezChanged()
init()
felevId()
int _felev_id;
CsoportDataBrowser(QDataBrowser)
primeInsert()primeUpdate()
init()
LabelKezdet(QLabel)
LabelSzint(QLabel)
ComboBoxGyakvez(QComboBox)
QLineEditNev(QLineEdit)
QSpinBoxMax(QSpinBox)
QSpinBoxGyakvez_id(QSpinBox)
activated()
PushButtonFirst(QPushButtonl)
PushButtonClose(QPushButton)
setFelevId()LabelSzint->setText()LabelKezdet->setText()
Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2Signálok és slotok - 2