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

Méret: px
Mutatás kezdődik a ... oldaltól:

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

Átírás

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

2

3 1. fejezet Impresszum Qt rajzolás munkafüzet (C)2006 Zimler Attila Tamás Visszajelzéseket szivesen fogadok. A munkafüzet online formában a következ címen található: A dokumentum generálásának dátuma: május 10.

4 2 Impresszum

5 2. fejezet Bevezet Formátumok class Example { /* Ez egy példa kódrészlet */ ; # Egy parancssori utasítás így néz ki (a # a prompt jel). függvény() Ez a jelölésmód azonban nem a függvény szignatúra helyes írásmódja! (El fordulhat, hogy van paramétere a függvénynek, de ez nem kerül kiírásra.) változó Ez egy változó jelölése. Az állományok jelölése ezen a módon lesz megvalósítva. Megjegyzések ˆ El fordulhat, hogy a Qt környezet speciális beállításokat igényel az adott gépen, a.pro állományban. Ehhez további segítség: exercise3.html. Amennyiben így kell használni a Qt-t, akkor az összes "qmake -project" parancs kiadása után újra be kell állítani ezeket a speciális dolgokat a.pro állományban. ˆ A hosszabb programrészletekben az alábbi formátumú megjegyzések lesznek, ezeknek a helyzete nem változik, miután belekerültek a kódba. (Tehát ezekhez képest lehet viszonyítani, hogy milyen kódot hová kell írni, és ezért a kód változatlan részletei elhagyhatóak.) /* határolósor */ ˆ A harmadik feladatsortól kezdve mindegyik feladat után le lehet fordítani a programot és meg lehet nézni a futását (ezért nincs is már odaírva a feladatok megoldásához, hogy tegyük ezt meg). A fordítást a következ paranccsal tehetjük meg: # make

6 4 Bevezet

7 3. fejezet A Qt grakai rendszere A Qt grakai rendszere több komponens együttm ködéséb l áll. A graka során nem közvetlenül a rajzfelületre rajzolunk, hanem egy logikai térbe. A logikai tér a rajzfelületre több lépcs ben képz dik, nem feltétlenül az alábbi sorrendben (viszont az eredmény ugyanaz lesz). 1. A logikai tér koordinátái átalakításra kerülnek, így tetsz leges helyre helyezhetjük a logikai térben az origót. 2. A logikai tér egy transzformációs mátrix segítségével átalakításra kerül, így az ábrát kirajzolás el tt forgathatjuk és eltolhatjuk ábra. A Qt rajzolási rendszere. Ennek a rendszernek több el nye is van: ˆ Fix koordinátákat rakhatunk a rajzunkba, és az ablak átméretezésénél ez nem fog problémát okozni. ˆ Eltolhatjuk a rajz közepére az origót, ha az nekünk úgy kényelmes. ˆ Elforgathatjuk (akár többször is) a rajzfelületet a rajzolás el tt. Ebb l következik, hogy egy kényelmetlen szögben rajzolás helyett, bármilyen állapotban megrajzolhatjuk az ábrát. Ezután elforgatva az ábrát az eredmény az lesz, mintha a kényelmetlen szögben rajzoltunk volna (persze nehézkes számítások nélkül). ˆ A leképezésnek a logikai és a zikai rajzfelület között nem szükséges, hogy vízszintes és függ leges arányban is ugyanolyan arányú legyen.

8 6 A Qt grakai rendszere

9 4. fejezet A feladatsorozat célja A munkafüzetben a feladatsorok folyamán egy grakus óra programot fogunk létrehozni. A program a következ tulajdonságokkal fog rendelkezni: ˆ Az aktuális id t fogja mutatni a program. ˆ Az ablak átméretezésekor arányosan nagyítjuk a rajzot. ˆ Kiküszöböljük a villogást az ábrákon ábra. A cél

10 8 A feladatsorozat célja

11 5. fejezet Alap Qt program létrehozása 1. Hozzunk létre egy main() függvényt és fordítsuk le! Tipp Ne felejtsük el, hogy a Qt alkalmazás elindításához a main() függvény két paraméteres formájára lesz szükségünk. (a) Hozzuk létre az alábbi tartalmú main.cpp állományt: int main(int argc, char* argv[]) { (b) Állítsuk el a qmake.pro állományát: # qmake -project (c) Fordítsuk le a programot: # qmake # make 2. Hozzunk létre egy f ablakot és jelenítsük meg a main() függvényb l! (A f ablak osztályának a munkafüzet a MainWnd nevet adja.) Tippek (a) A következ fejléc állományokra lesz szükség: ˆ qmainwindow.h: a f ablak származtatásához. ˆ qapplication.h: a Qt f program létrehozásához. (b) A f ablak osztályának deklarációját (.h) és denícióját (.cpp) mindenképpen két külön állományba kell rakni, mert különben a qmake nem fog rendesen m ködni, ha a meta object compiler-t (moc) kell futtatnia. (c) Ne felejtsük el a Q_OBJECT makrót a f ablak osztályából. (d) Jelenleg elég ha a f ablak csak egy üres konstruktort tartalmaz. (e) Könnyen elérhetjük, hogy a f ablak becsukására a program megálljon, ha használjuk a QApplication::setMainWidget() metódusát. (f) Mivel extra állományokat adtunk a projekthez, ezért a projekt állományt aktuálizálni kell. Ezt két módon tehetjük meg:

12 10 Alap Qt program létrehozása ˆ a HEADERS konstanshoz hozzáadjuk az új fejléc állományokat, a SOURCES konstanshoz hozzáadjuk az új.cpp állományokat. Amennyiben bármelyik nem létezik, létrehozzuk. ˆ Újrageneráljuk a.pro állományt: # rm -f *.pro # qmake -project Megjegyzés: Ne felejtsük el a Makele állományt újragenerálni. # qmake (a) Hozzuk létre az alábbi tartalmú mainwnd.h állományt: #ifndef MAINWND_H #define MAINWND_H #include <qmainwindow.h> class MainWnd : public QMainWindow { Q_OBJECT public: MainWnd(); ; #endif /* MAINWND_H */ (b) Hozzuk létre az alábbi tartalmú mainwnd.cpp állományt: #include "mainwnd.h" MainWnd::MainWnd() { (c) A main.cpp állományt módosítsuk, hogy a következ képpen nézzen ki: #include "mainwnd.h" #include <qapplication.h> int main(int argc, char* argv[]) { QApplication app(argc, argv); MainWnd mw; mw.show(); app.setmainwidget(&mw); app.exec(); (d) Generáljuk újra a.pro állományt: # rm -f *.pro # qmake -project (e) Fordítsuk le a programot. # qmake # make 3. Hozzunk létre a QWidget osztályból származtatással egy egyedi widget-et és azt helyezzük el a f ablakon! (Ez az osztály a munkafüzetben a Clock nevet viseli.) Tippek (a) Ne felejtsük el, hogy a QWidget nem rendelkezik nulla paraméterszámú konstruktorral, hanem alapértelmezett értékei vannak a konstruktorának.

13 11 (b) A f ablak adattagjai közé mutató formában vegyük fel az újonnan létrehozott widget típust. (c) A QMainWindow::setCentralWidget() metódus segítségével rakhatjuk a f ablakra az objektumot. (d) Ne felejtsük el a f ablakot kiegészíteni egy destruktorral, ahol az egyedi widget objektumot megsemmisítjük. (e) Ne felejtsük el a Q_OBJECT makrót. (f) Ne felejtsük el módosítani a.pro állományt. (a) Hozzuk létre az alábbi clock.h állományt: #ifndef CLOCK_H #define CLOCK_H #include <qwidget.h> class Clock : public QWidget { Q_OBJECT public: Clock(QWidget* parent = 0, const char* name = 0, WFlags f = 0); ; #endif /* CLOCK_H */ (b) Hozzuk létre az alábbi clock.cpp állományt: #include "clock.h" Clock::Clock(QWidget* parent, const char* name, WFlags f) : QWidget(parent, name, f) { (c) Vegyünk fel egy privát _clock adattagot a MainWnd osztályba és szerkesszük be a clock.h fejlécállományt. Ennek eredményeképpen a következ képpen kell kinéznie a mainwnd.h állománynak: #ifndef MAINWND_H #define MAINWND_H #include <qmainwindow.h> #include "clock.h" class MainWnd : public QMainWindow { Q_OBJECT Clock* _clock; public: MainWnd(); ~MainWnd(); ; #endif /* MAINWND_H */ (d) Helyezzük a f ablakra az objektumot. Ehhez módosítsuk a MainWnd osztály konstruktorát: MainWnd::MainWnd() { setcentralwidget(_clock = new Clock(this));

14 12 Alap Qt program létrehozása (e) Írjuk meg a MainWnd osztály 3. pontjában már bevezetett destruktorát: MainWnd::~MainWnd() { delete _clock; (f) Generáljuk újra a.pro állományt és fordítsuk le a programot: # rm -f *.pro # qmake -project # qmake # make

15 6. fejezet A rajzolást végz kód el készítése 1. Hozzunk létre egy _draw() metódust a Clock osztály számára! (a) Módosítsuk a clock.h állományt, hogy a következ képpen nézzen ki: #ifndef CLOCK_H #define CLOCK_H #include <qpainter.h> #include <qwidget.h> // új sor class Clock : public QWidget { Q_OBJECT void _draw(qpainter* painter); // új sor public: Clock(QWidget* parent = 0, const char* name = 0, WFlags f = 0); ; #endif /* CLOCK_H */ (b) A clock.cpp állományban hozzuk létre a következ metódust _draw() metódust: void Clock::_draw(QPainter* painter) { /* Változók deklarálása */ /* Az alap megrajzolása */ /* A vonalak megrajzolása */ /* A számok elhelyezése az óralapon */ /* A nagymutató megrajzolása */ /* A kismutató megrajzolása */ /* A másodperc mutató megrajzolása */ /* Újabb frissítés ütemezése */ Megjegyzés: A _draw() implementációját a következ fejezetekben adjuk meg, most csak a gerincét hozzuk létre. (c) Fordítsuk le a programot. # make 2. Deniáljuk felül a Clock osztályban a QWidget::paintEvent() metódusát, és ebb l hívjuk meg a _draw() metódust! Tippek

16 14 A rajzolást végz kód el készítése (a) Hozzuk létre a QPainter objektumot. (b) Válasszuk ki a kisebbik méretet, hogy arányosan tudjuk megjeleníteni a rajzot. (c) Állítsuk be a koordinátarendszert. (d) Hívjuk meg a rajzolást végz rutint (_draw()). (a) Módosítsuk a clock.h állományt úgy, hogy a következ képpen nézzen ki: #ifndef CLOCK_H #define CLOCK_H #include <qpainter.h> #include <qwidget.h> class Clock : public QWidget { Q_OBJECT void _draw(qpainter* painter); void paintevent(qpaintevent* event); // új sor public: Clock(QWidget* parent = 0, const char* name = 0, WFlags f = 0); ; #endif /* CLOCK_H */ (b) Valósítsuk meg a következ Clock::paintEvent() metódust: void Clock::paintEvent(QPaintEvent*) { /* Kett s pufferelés el készítés */ /* A QPainter objektum létrehozása */ QPainter painter(this); /* A rajzoló rutin meghívása */ int side = QMIN(width(), height()); painter.setviewport( (width() - side) / 2, (height() - side) / 2, side, side ); painter.setwindow(-50, -50, 101, 101); _draw(&painter); /* A kett s pufferelés ábrájának kihelyezése */ (c) Fordítsuk le a kódot: # make

17 7. fejezet A rajzolást megvalósító kód 1. Rajzoljuk meg az óra alapját! Tippek (a) Állítsuk be a ceruzát fehérre. (b) Állítsuk be a kitöltést fehérre. (c) Rajzoljuk meg a kört a QPainter::drawEllipse() metódussal. (a) Írjuk át a Clock::_draw() metódus fejlécét a clock.cpp állományban, hogy a következ módon nézzen ki: void Clock::_draw(QPainter* painter) (b) Adjuk hozzá a Clock::_draw() metódushoz a következ részletet: /* Az alap megrajzolása */ painter->setpen(qpen(white, 1, SolidLine)); painter->setbrush(qbrush(white, SolidPattern)); painter->drawellipse(-50, -50, 101, 101); /* A vonalak megrajzolása */ 2. Húzzuk meg a 12 óra értékhez tartozó függ leges vonalat! Tippek (a) Állítsuk a ceruzát feketére. (b) Húzzuk meg a vonalat a QPainter::drawLine() metódussal. Illesszük a következ kódot a Clock::_draw() metódusba: /* A vonalak megrajzolása */ painter->setpen(qpen(black, 1, SolidLine)); painter->drawline(0, -50, 0, -47); /* A számok elhelyezése az óralapon */

18 16 A rajzolást megvalósító kód 3. Rajzoljuk meg az összes vonalat! Tippek (a) Vegyük fel egy QWMatrix típusú objektumot a Clock::_draw() metódusba. (b) Ismételjük meg 60-szor a következ három lépést: i. Húzzunk egy vonalat, ahogy azt az el z feladatban tettük (pontosan ugyanazokkal a koordinátákkal). ii. Forgassuk a QWMatrix objektumot 6 fokkal. iii. Állítsuk be a módosított QWMatrix objektum segítségével a QPainter world- Matrix-át ( QPainter::setWorldMatrix()). (a) Vegyünk fel egy QWMatrix típusú mátrixot a Clock::_draw() metódusba: /* Változók deklarálása */ QWMatrix matrix; /* Az alap megrajzolása */ (b) Alakítsuk át a vonalak rajzolását a következ re: /* A vonalak megrajzolása */ for (int i = 0; i < 60; ++i) { painter->setpen(qpen(black, 1, SolidLine)); painter->drawline(0, -50, 0, -47); matrix.rotate(6); painter->setworldmatrix(matrix); /* A számok elhelyezése az óralapon */ 4. Legyen minden ötödik vonal vastagabb és hosszabb! Alakítsuk át a Clock::_draw() metódusát a következ módon: /* A vonalak megrajzolása */ for (int i = 0; i < 60; ++i) { // vastag vagy vékony vonal kell? painter->setpen(qpen(black, i % 5 == 0? 3 : 0, SolidLine)); // rövid vagy hosszú vonal kell? painter->drawline(0, -50, 0, i % 5 == 0? -45 : -47); // 6 fokonként egy-egy vonal, összesen 60 vonal. matrix.rotate(6); painter->setworldmatrix(matrix); /* A számok elhelyezése az óralapon */ 5. Helyezzük el a 12-es feliratot az óralapon! Tippek

19 17 (a) A QPainter::drawText() metódusai között van egy olyan, amelynek meg lehet adni a befoglaló négyzeten belül a szöveg igazitását. (b) A QString típusnak van egy setnum() metódusa, aminek segíségével egy számot könnyen szöveggé lehet alakítani. (c) Körülményes végiggondolni, hogy az el z feladat megoldása során a QPainter world- Matrix tulajdonsága milyen állapotban maradt. Egyszer bb lehet alaphelyzetbe állítani. Alakítsuk a következ re a Clock::_draw() metódust: /* A számok elhelyezése az óralapon */ QString text; matrix.reset(); painter->setworldmatrix(matrix); text.setnum(12); painter->setpen(qpen(blue, 0, SolidLine)); painter->drawtext( -10, -45, 20, 20, Qt::AlignHCenter Qt::AlignVCenter, text ); /* A nagymutató megrajzolása */ 6. Helyezzük fel az összes számot! Tipp A QWMatrix::map() metódus segítségével koordinátákat transzformálhatunk a logikai térben. A Clock::_draw() megfelel részlete: /* A számok elhelyezése az óralapon */ QString text; matrix.reset(); painter->setpen(qpen(blue, 0, SolidLine)); painter->setworldmatrix(matrix); const int cx = 0; // x irányú közepe a szövegnek const int cy = -35; // y irányú közepe a szövegnek const int tw = 10; // A szöveg szélessége (valójában / 2) const int th = 10; // A szöveg magassága (valójában / 2) for (int i = 3; i < 13; i += 3) { int tcx, tcy; // átalakított cx, cy matrix.rotate(90); matrix.map(cx, cy, &tcx, &tcy); text.setnum(i); painter->drawtext( tcx - tw, tcy - th, tw * 2, th * 2, Qt::AlignHCenter Qt::AlignVCenter, text ); /* A nagymutató megrajzolása */

20 18 A rajzolást megvalósító kód 7. Hozzunk létre a Clock osztály számára egy _drawarrow() metódust, amely paraméterben megkapja a QPainter objektumot és a mutató hosszát! Ezután rajzoljuk meg a mutatót és a mutató hegyét! (a) Az új clock.h állomány tartalma: #ifndef CLOCK_H #define CLOCK_H #include <qpainter.h> #include <qwidget.h> class Clock : public QWidget { Q_OBJECT void _draw(qpainter* painter); void _drawarrow(qpainter* painter, int length); // új sor void paintevent(qpaintevent* event); public: Clock(QWidget* parent = 0, const char* name = 0, WFlags f = 0); ; #endif /* CLOCK_H */ (b) A Clock::_drawArrow() metódus: void Clock::_drawArrow(QPainter* painter, int length) { /* A ceruza és az ecset beállítása */ painter->setpen(qpen(black, 1, SolidLine)); painter->setbrush(qbrush(black, SolidPattern)); /* A mutató hegyének megrajzolása */ QCOORD triangle[3][2] = { { -3, -length + 10, { 0, -length, { 3, -length + 10 ; painter->drawconvexpolygon(qpointarray(3, &triangle[0][0])); /* A mutató szárának megrajzolása */ (c) A Clock::_draw() metódus szükséges módosítása: /* A nagymutató megrajzolása */ matrix.reset(); painter->setworldmatrix(matrix); _drawarrow(painter, 45); /* A kismutató megrajzolása */ 8. Hozzuk létre a mutató szárát. Tipp Rajzoljuk meg a kört a mutató szárának végére, hogy szépen nézzen ki. Alakítsuk át a következ re a Clock::_drawArrow() metódust: /* A mutató szárának megrajzolása */ QCOORD box[4][2] = { { -1, -length + 10, { 1, -length + 10, { 1, 0, { -1, 0

21 19 ; painter->setpen(qpen(black, 1, SolidLine)); painter->setbrush(qbrush(black, SolidPattern)); painter->drawconvexpolygon(qpointarray(4, &box[0][0])); painter->drawellipse(-1, -1, 3, 3); 9. Rajzoljuk meg a kismutatót. A Clock::_draw() metódust kell módosítani: /* A kismutató megrajzolása */ matrix.reset(); painter->setworldmatrix(matrix); _drawarrow(painter, 30); /* A másodperc mutató megrajzolása */ 10. Rajzoljuk meg a másodperc mutatót. A Clock::_draw() metódusának szükséges módosítása: /* A másodperc mutató megrajzolása */ matrix.reset(); painter->setworldmatrix(matrix); painter->setpen(qpen(red, 1, SolidLine)); painter->drawline(0, -45, 0, 0); /* Újabb frissítés ütemezése */

22 20 A rajzolást megvalósító kód

23 8. fejezet Az aktuális id t beállító kód 1. Valósítsuk meg a nagymutató beállítását! Tippek (a) A worldmatrix forgatásával nagyon könnyen megfelel irányba lehet állítani a mutatót. (b) A QTime::currentTime() metódusával le lehet kérdezni a megfelel id t. (a) Szerkesszük be a qdatetime.h fejlécet a clock.cpp-be: #include <qdatetime.h> (b) Módosítsuk a következ két részletet a Clock::_draw() metódusban: /* Változók deklarálása */ QWMatrix matrix; QTime t = QTime::currentTime(); /* Az alap megrajzolása */ /* A nagymutató megrajzolása */ matrix.reset(); matrix.rotate(t.minute() * 6); painter->setworldmatrix(matrix); _drawarrow(painter, 45); // új sor /* A kismutató megrajzolása */ 2. Valósítsuk meg óra és a másodperc mutató beállítását! Szükséges módosítás a Clock::_draw() állományban. /* A kismutató megrajzolása */ matrix.reset(); matrix.rotate((t.hour() * 60 + t.minute()) / 2); painter->setworldmatrix(matrix); _drawarrow(painter, 30); // új sor /* A másodperc mutató megrajzolása */

24 22 Az aktuális id t beállító kód matrix.reset(); matrix.rotate(t.second() * 6); painter->setworldmatrix(matrix); painter->setpen(qpen(red, 1, SolidLine)); painter->drawline(0, -45, 0, 0); // új sor /* Újabb frissítés ütemezése */ 3. Kapcsoljuk egy id zít re az újrarajzolást! Tippek (a) Vegyünk fel egy QTimer adattagot a Clock osztályba. (b) A rajzolás végeztével egy egyszeri lefutású id zít t indítsunk 1 másodperces késleltetéssel. Hogy miért? Mert így amikor a rendszer újrarajzolja az objektumot, akkor elölr l kezd dik az egy másodperc mérése. (c) Az id zít lejártát az update() metódusra kapcsolhatjuk. (d) Amennyiben új adattagot veszünk fel az osztályba, akkor a qmake által generált Makele ezt nem tudja teljesen helyesen értékelni. # make distclean # make (a) A clock.h új tartalma: #ifndef CLOCK_H #define CLOCK_H #include <qpainter.h> #include <qtimer.h> #include <qwidget.h> class Clock : public QWidget { Q_OBJECT QTimer timer; // új sor void _draw(qpainter* painter); void _drawarrow(qpainter* painter, int length); void paintevent(qpaintevent* event); public: Clock(QWidget* parent = 0, const char* name = 0, WFlags f = 0); ; #endif /* CLOCK_H */ (b) A szükséges módosítás a Clock::_draw() metódusban: /* Újabb frissítés ütemezése */ connect(&timer, SIGNAL(timeout()), this, SLOT(update())); timer.start(1000, true); (c) Amennyiben új adattagot veszünk fel az osztályba, akkor a qmake által generált Makele ezt nem tudja teljesen helyesen értékelni. # make distclean # make 4. Indítsuk el a programot, nagyítsuk fel teljes képerny sre és gyeljük meg, ahogy villog.

25 9. fejezet A villogás kiküszöbölése kett s puerelés (double buering) segítségével Mi is az a kett s puerelés? A villogást a rajz folyamatos újrarajzolása során a számítások viszonylagos lassúsága okozza. (Ez a számítás a képerny frissítéséhez képest értend.) A kett s puerelés ezt úgy oldja meg, hogy nem közvetlenül a képerny memóriaterületére rajzolunk. Amikor elkészülünk a rajzzal, akkor egy nagyon gyors rutinnal kicseréljük a képerny n látható rajzot a háttérben elkészülttel. Az, hogy ez hogy történik a rendszer ügyességén és hardverén múlik: ˆ Ha a grakus kártya rendelkezik kell en sok memóriával, és egy egész képerny nyi képr l van szó, akkor egy egyszer memóriacím átírással meg lehet ezt oldani. ˆ A DMA segítségével a CPU-tól függetlenül lehet adatot mozgatni (közben a CPU számításokat végezhet). Megjegyzés: Ez a feladatsor csak a végén ad vizsgálható eredményt, függetlenül attól, hogy mindegyik lépés után lefordítható. 1. Emlékeztet az el z feladatsor végér l: Indítsuk el a programot, nagyítsuk fel teljes képerny sre és gyeljük meg, ahogy villog. 2. Hozzunk létre egy képet, majd méretezzük az aktuális objektumnak megfelel méret re! (Szükség lesz ehhez arra is, hogy a Clock::paintEvent() paraméterét nevesítsük, hogy elérjük.) (a) A qpixmap.h fejlécet be kell szerkeszteni a clock.cpp állományba. (b) A Clock::paintEvent() megfelel részlete: void Clock::paintEvent(QPaintEvent* event) { /* Kett s pufferelés el készítés */ static QPixmap pixmap; // módosított sor!

26 24 A villogás kiküszöbölése kett s puerelés (double buering) segítségével QRect rect = event->rect(); QSize newsize = rect.size().expandedto(pixmap.size()); pixmap.resize(newsize); pixmap.fill(this, rect.topleft()); /* A QPainter objektum létrehozása */ 3. Módosítsuk a QPainter objektum létrehozását, hogy a QPixmapre rajzoljon! A Clock::paintEvent() metódus megfelel részlete: /* A QPainter objektum létrehozása */ QPainter painter(&pixmap, this); // módosított sor! /* A rajzoló rutin meghívása */ 4. A kett s puerelés képét helyezzük ki az objektumra! A Clock::paintEvent() metódus vége: /* A kett s pufferelés ábrájának kihelyezése */ bitblt(this, event->rect().topleft(), &pixmap); 5. Vegyük át a QWidget-t l az objektum teljes rajzolását (kapcsoljuk ki az automatikus újrarajzolási eseményeket)! Megjegyzés: Erre azért van szükség, mert különben automatikusan letörli az objektumot a rendszer. Módosítsuk a Clock::Clock() konstruktorát, hogy a következ módon nézzen ki: Clock::Clock(QWidget* parent, const char* name, WFlags f) : QWidget(parent, name, f Qt::WNoAutoErase) { 6. Fordítsuk le a kódot és gyeljük meg, hogyha odébb mozgatjuk az ablakot, akkor egy másodpercig szétesik a kép! 7. Oldjuk meg, hogy ha megmozdítjuk az ablakot, akkor se essen szét a kép! Tipp A QMainWindow::moveEvent() metódusát kell felüldeniálni. (a) A mainwnd.h új verziója: #ifndef MAINWND_H #define MAINWND_H #include <qmainwindow.h> #include "clock.h" class MainWnd : public QMainWindow {

27 25 Q_OBJECT Clock* _clock; void moveevent(qmoveevent*); public: MainWnd(); ~MainWnd(); ; #endif /* MAINWND_H */ // új sor (b) És a MainWnd::moveEvent() metódus megvalósítása: void MainWnd::moveEvent(QMoveEvent*) { _clock->update();

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III. Elemi alkalmazások fejlesztése III. Grafikus felületű alkamazások készítése Bevezetés I. Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2009 1 www.trolltech.com

Részletesebben

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III. Elemi alkalmazások fejlesztése III. Bevezetés Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2007 1 A Qt assistant nyitó ablaka www.trolltech.com 2 Alkalmazás

Részletesebben

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III. Elemi alkalmazások fejlesztése III. Memóriajáték 1. Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2007 1 memorygame Játék közben 2 memorygame Kártyák kiválasztása

Részletesebben

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

Elemi alkalmazások fejlesztése III. A Qt assistant elindítása. Ajánlott ir odalom. A Qt assistant nyitó ablaka Elemi alkalmazások fejlesztése III Ajánlott ir odalom Egy ablakos alkalmazás készítése I. C++ / Qt felhasználásával Qt dokumentáció online: www.trolltech.com lokális változat: Kdevelop help vagy /usr/share/doc...

Részletesebben

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

bool _freehand = false; QPoint _lastpoint; // ebben a pontban volt az utolsó rajzolásnál az egérmutató canvas.h #pragma once #include #include #include #include #include #include #include // terület kiválasztáshoz struct RajzParameterek

Részletesebben

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III Elemi alkalmazások fejlesztése III Egy ablakos alkalmazás készítése I. C++ / Qt felhasználásával készítette: Szabóné Nacsa Rozália 1 Ajánlott irodalom Qt dokumentáció online: www.trolltech.com lokális

Részletesebben

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

Alkalmazások fejlesztése III. Qt 4 /C++ alapú grafikus alkalmazás Bevezetés I. Tartalomjegyzék Alkalmazás készítés Qt osztályokkal...2 A qmake eszköz...2 Hello Qt (hello)...2 Objektumok közötti kommunikáció (quit)...3 Fordítás/futtatás...4 Grafikus felület létrehozása, vezérlők szinkronizálása

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

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

3D-s számítógépes geometria és alakzatrekonstrukció 3D-s számítógépes geometria és alakzatrekonstrukció 3a. Tesztkörnyezet I http://cg.iit.bme.hu/portal/node/312 https://portal.vik.bme.hu/kepzes/targyak/viiima01 Dr. Várady Tamás, Salvi Péter BME, Villamosmérnöki

Részletesebben

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

Grafikus Qt programok írása segédeszközök nélkül Grafikus Qt programok írása segédeszközök nélkül Grafikus felületű Qt programokat ahogy láttuk, készíthetünk egy egyszerű szövegszerkesztővel is, bár a Qt jó támogatást ad a grafikus felület grafikus tervezésére

Részletesebben

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

3D-s számítógépes geometria és alakzatrekonstrukció 3D-s számítógépes geometria és alakzatrekonstrukció Tesztkörnyezet I http://cg.iit.bme.hu/portal/node/312 https://portal.vik.bme.hu/kepzes/targyak/viiima01 Dr. Várady Tamás, Dr. Salvi Péter BME, Villamosmérnöki

Részletesebben

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

QLabel *label = new Qlabel(Hello Qt!,0); #include #include int main(int argc,char **argv) QApplication app(argc,argv); QLabel *label = new Qlabel("Hello Qt!",0); app.setmainwidget(label); label->show(); return app.exec();

Részletesebben

Elemi grafika. Stílusok, időzítő, képek

Elemi grafika. Stílusok, időzítő, képek Elemi grafika Stílusok, időzítő, képek Rajzolási felület A Qt-ban a grafikus felhasználói felület tartalmát tetszőlegesen rajzolhatjuk, ezáltal egyedi megjelenítést adhatunk neki. Mindenre rajzolhatunk,

Részletesebben

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

Programozás I. 5. Előadás: Függvények Programozás I 5. Előadás: Függvények Függvény Egy alprogram Egy C program általában több kisméretű, könnyen értelmezhető függvényből áll Egy függvény megtalálható minden C programban: ez a main függvény

Részletesebben

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III. Elemi alkalmazások fejlesztése III. MDI alkalmazás II. (Számla) Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2007 1 Számla felépítése fejléc tábla 2 Az alkalmazás

Részletesebben

Budapest, 2007. március. ELTE Informatikai Kar

Budapest, 2007. március. ELTE Informatikai Kar Tartalomjegyzék Alkalmazás készítés Qt osztályokkal...2 A qmake eszköz...2 Hello Qt (hello)...2 A projekt elkészítésének lépései...3 Objektumok közötti kommunikáció (quit)...3 A projekt elkészítésének

Részletesebben

Objektumok és osztályok. Az objektumorientált programozás alapjai. Rajzolás tollal, festés ecsettel. A koordinátarendszer

Objektumok és osztályok. Az objektumorientált programozás alapjai. Rajzolás tollal, festés ecsettel. A koordinátarendszer Objektumok és osztályok Az objektumorientált programozás alapjai Rajzolás tollal, festés ecsettel A koordinátarendszer A vektorgrafikában az egyes grafikus elemeket (pontokat, szakaszokat, köröket, stb.)

Részletesebben

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

Egységes és objektumközpontú adatbázis-kezelés (2. rész) Egységes és objektumközpontú adatbázis-kezelés (2. rész) A folytatásában a bemutatjuk, hogyan kezelhetünk Qt rendszer alatt SQL sormutatót, és készíthetünk grafikus felületet programoknak a Qt Designer

Részletesebben

Eseménykezelés. Aszinkron kommunikáció

Eseménykezelés. Aszinkron kommunikáció Eseménykezelés Aszinkron kommunikáció Feladat Készítsünk egy stoppert, amely másodpercenként jelzi a múló időt. Ez a folyamat egy adott jelzés hatására induljon el; ugyanezen jelzés ismétléseinek hatására

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2015. 03. 18. 6. El adás Graka Java-ban Emlékezzünk kicsit vissza a tikz-re: \begin{tikzpicture \draw (0,0) node[draw,circle] (S) {s; \draw (3,2) node[draw,circle] (A) {a; \draw

Részletesebben

Eseményvezérelt alkalmazások fejlesztése I 4. előadás. Elemi grafika és egérkezelés

Eseményvezérelt alkalmazások fejlesztése I 4. előadás. Elemi grafika és egérkezelés Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése I 4. előadás Elemi grafika és egérkezelés 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

Rajz 01 gyakorló feladat

Rajz 01 gyakorló feladat Rajz 01 gyakorló feladat Alkatrészrajz készítése Feladat: Készítse el az alábbi ábrán látható kézi működtetésű szelepház alkatrészrajzát! A feladat megoldásához szükséges fájlok: Rjz01k.ipt A feladat célja:

Részletesebben

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

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma

Részletesebben

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

A jobboldalon a pnlright egy Stacked Widget Állítsuk be az első lapot és nevezzük el pnldraw-ra: A Rajzolás lap A rajzolás lap elemi rajzolási lehetőségek bemutatására szolgál. A rajzolás a jobboldali pnlright widget egyik lapjára rakott widgetre történik. A pnlright egy több lapot tartalmazó widget

Részletesebben

Programozás C++ -ban 2007/4

Programozás C++ -ban 2007/4 Programozás C++ -ban 2007/4 1. Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több szempontból is hasznos

Részletesebben

Eseményvezérelt alkalmazások fejlesztése I 4. előadás. Elemi grafika és egérkezelés. Elemi grafika és egérkezelés Rajzolás grafikus felületen

Eseményvezérelt alkalmazások fejlesztése I 4. előadás. Elemi grafika és egérkezelés. Elemi grafika és egérkezelés Rajzolás grafikus felületen Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése I 4. előadás 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Rajzolás grafikus felületen

Részletesebben

BME MOGI Gépészeti informatika 7.

BME MOGI Gépészeti informatika 7. BME MOGI Gépészeti informatika 7. 1. feladat Írjon Windows Forms alkalmazást egy kör és egy pont kölcsönös helyzetének vizsgálatára! A feladat megoldásához hozza létre a következő osztályokat! Pont osztály:

Részletesebben

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

MySql elindítása. Elemi alkalmazások fejlesztése IV. Feladat. Az alkalmazás adatbázisa Elemi alkalmazások fejlesztése IV. C++/Qt adatbáziskezel ő alkalmazás készítése Kdevelop környezetben I. MySql elindítása [nacsa@localhost nacsa]$ su Password:jelszó [root@localhost nacsa]# /usr/bin/safe_mysqld

Részletesebben

Elemi alkalmazások fejlesztése IV.

Elemi alkalmazások fejlesztése IV. Elemi alkalmazások fejlesztése IV. C++/Qt adatbáziskezelő alkalmazás készítése Kdevelop környezetben I. Készítette: Szabóné Nacsa Rozália 1 MySql elindítása [nacsa@localhost nacsa]$ su Password:jelszó

Részletesebben

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

Alkalmazások fejlesztése III. Qt 4 /C++ alapú grafikus alkalmazás - Memóriajáték 1/2 Tartalomjegyzék Memóriajáték...2 A memóriajáték osztálydiagramja...2 A projektben használt segéd függvények (Utils)...3 utils.h...3 utils.cpp...3 CardButton osztály...4 cardbutton.h...4 cardbutton.cpp...5

Részletesebben

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

Tervezőeszközök, fejlesztőeszközök használata Qt alapú alkalmazásoknál. Saját vezérlő használata tervezőben (worldclocks) Tartalomjegyzék Tervezőeszközök, fejlesztőeszközök használata Qt alapú alkalmazásoknál...1 Saját vezérlő használata tervezőben (worldclocks)...1 DigitalClock osztály (módosítás)...2 MyForm osztály...3

Részletesebben

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III Elemi alkalmazások fejlesztése III Qt SDI alkalmazás készítése I Kdevelop környezetben Készítette: Szabóné Nacsa Rozália Steingart Ferenc 1 Feladat Készítsünk egy számlakezel ő ablakos alkalmazást! Számlafejléc

Részletesebben

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 6. gyakorlat C++ alapok, szövegkezelés Surányi Márton PPKE-ITK 2010.10.12. Forrásfájlok: *.cpp fájlok Fordítás: a folyamat, amikor a forrásfájlból futtatható állományt állítunk

Részletesebben

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III Elemi alkalmazások fejlesztése III Egyablakos alkalmazás készítése I. Qt/X11 felhasználásával Kdevelop környezetben készítette: Steingart Ferenc Szabóné Nacsa Rozália Ajánlott irodalom Qt dokumentáció

Részletesebben

Osztály és objektum fogalma

Osztály és objektum fogalma Osztály és objektum fogalma A C++ programozási nyelv I. CPP1/ 1 Az osztály (class) class: adatok és módszerek (method) (függvények) együttese, amely absztrakt adattípusként működik. objektum: egy osztály

Részletesebben

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem http:www.johanyak.hu Analóg óra Készítsünk egy analóg órát megjelenítő alkalmazást. A feladat egy lehetséges megoldása a következő: 1. Az alkalmazás vázának automatikus generálása Fájl menü, New, Project

Részletesebben

Programozás C++ -ban

Programozás C++ -ban Programozás C++ -ban 4. Bevezetés az osztályokba 4.1 Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több

Részletesebben

Osztályok. 4. gyakorlat

Osztályok. 4. gyakorlat Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum

Részletesebben

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III. Elemi alkalmazások fejlesztése III. Egy ablakos alkalmazás készítése II. C++ / Qt / KDevelop felhasználásával készítette: Szabóné Nacsa Rozália lektorálta: Párniczky Krisztina 1 Fájlkezelés Olvasás 2 A

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. szeptember 18. 2. El adás Komplex szám public class Complex { private float repart_; private float impart_; public Complex() { repart_ = 0; impart_ = 0; public Complex(float

Részletesebben

C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv Konstruktorok-destruktorok C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus

Részletesebben

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*; Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely

Részletesebben

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

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése FEJLETT PROGRAMOZÁSI NYELVEK, 2009 2. GYAKORLAT - Linux alatti C/C++ programozás Cél: Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Részletesebben

C programozási nyelv

C programozási nyelv C programozási nyelv Előfeldolgozó utasítások Dr Schuster György 2011 május 3 Dr Schuster György () C programozási nyelv Előfeldolgozó utasítások 2011 május 3 1 / 15 A fordítás menete Dr Schuster György

Részletesebben

Elemi alkalmazások fejlesztése III

Elemi alkalmazások fejlesztése III Elemi alkalmazások fejlesztése III C++/ Qt alapú SDI alkalmazás készítése I. Készítette: Szabóné Nacsa Rozália Steingart Ferenc 1 Feladat Készítsünk egy számlakezel ő ablakos alkalmazást! Számlafejléc

Részletesebben

Programozás I gyakorlat

Programozás I gyakorlat Programozás I. - 2. gyakorlat Változók, kiiratás, bekérés Tar Péter 1 Pannon Egyetem M szaki Informatikai Kar Számítástudomány Alkalmazása Tanszék Utolsó frissítés: September 24, 2007 1 tar@dcs.vein.hu

Részletesebben

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

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/eaf4/ Qt 4 2007

Részletesebben

Szoftvertechnolo gia gyakorlat

Szoftvertechnolo gia gyakorlat Szoftvertechnolo gia gyakorlat Dr. Johanyák Zsolt Csaba http://johanyak.hu 1. Dependency Injection (függőség befecskendezés) tervezési minta A tervezési minta alapgondolata az, hogy egy konkrét feladatot

Részletesebben

Bevezetés a programozásba II 1. gyakorlat. A grafikus könyvtár használata, alakzatok rajzolása

Bevezetés a programozásba II 1. gyakorlat. A grafikus könyvtár használata, alakzatok rajzolása Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba II 1. gyakorlat A grafikus könyvtár használata, alakzatok rajzolása 2014.02.10. Giachetta Roberto groberto@inf.elte.hu

Részletesebben

Rajz 02 gyakorló feladat

Rajz 02 gyakorló feladat Rajz 02 gyakorló feladat Alkatrészrajz készítése A feladat megoldásához szükséges fájlok: Rjz02k.ipt Feladat: Készítse el az alábbi ábrán látható tengely alkatrészrajzát! A feladat célja: Az alkatrész

Részletesebben

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. április 4. Számok rendezése Feladat: Fejlesszük tovább úgy a buborék rendez algoritmust bemutató példát, hogy a felhasználó adhassa meg a

Részletesebben

Dr. Schuster György október 14.

Dr. Schuster György október 14. Real-time operációs rendszerek RTOS 2011. október 14. A fordítás vázlata prog.c Előfeldolgozó Átmenti állomány Fordító prog.obj más.obj-tek könyvtárak indító kód Linker futtatható kód Ismétlés Előfeldolgozó

Részletesebben

Bevezetés a programozásba Előadás: Fordítási egység

Bevezetés a programozásba Előadás: Fordítási egység Bevezetés a programozásba 2 5. Előadás: Fordítási egység ISMÉTLÉS Tagfüggvény kiemelése struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; void Particle::rajzol() { gout

Részletesebben

A Paint program használata

A Paint program használata A Paint program használata A Windows rendszerbe épített Paint program segítségével képeket rajzolhat, színezhet és szerkeszthet. A Paint használható digitális rajztáblaként. Egyszerű képek és kreatív projektek

Részletesebben

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok Bevezetés a programozásba II 8. Előadás: Osztályok, objektumok, osztályszintű metódusok vektor.h #ifndef VEKTOR_H #define VEKTOR_H class Vektor { int meret, *mut; public: Vektor(int meret); int szamlal(int

Részletesebben

A Vonallánc készlet parancsai lehetővé teszik vonalláncok és sokszögek rajzolását.

A Vonallánc készlet parancsai lehetővé teszik vonalláncok és sokszögek rajzolását. 11. Geometriai elemek 883 11.3. Vonallánc A Vonallánc készlet parancsai lehetővé teszik vonalláncok és sokszögek rajzolását. A vonallánc egy olyan alapelem, amely szakaszok láncolatából áll. A sokszög

Részletesebben

Diagram formázása. A diagram címének, a tengelyek feliratainak, jelmagyarázatának, adatfeliratainak formázása

Diagram formázása. A diagram címének, a tengelyek feliratainak, jelmagyarázatának, adatfeliratainak formázása A diagram címének, a tengelyek feliratainak, jelmagyarázatának, adatfeliratainak formázása Ha ezen elemeknek a betűtípusát, betűstílusát, betűméretét, betűszínét és az elem hátterét akarjuk formázni, akkor

Részletesebben

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

Programozás 6. Dr. Iványi Péter Programozás 6. Dr. Iványi Péter 1 Előfeldolgozás része Makrók A forrás kódban elvégzi a helyettesítéseket a fordító Csak egyszer végez helyettesítést Nem olyan makrók, mint a LISP vagy Scheme esetén Csak

Részletesebben

Abstract osztályok és interface-ek. 7-dik gyakorlat

Abstract osztályok és interface-ek. 7-dik gyakorlat Abstract osztályok és interface-ek 7-dik gyakorlat Abstract metódusok és osztályok Az OO fejlesztés során olyan osztályokat is kialakíthatunk, melyeket csak továbbfejlesztésre, származtatásra lehet használni,

Részletesebben

7. fejezet: Mutatók és tömbök

7. fejezet: Mutatók és tömbök 7. fejezet: Mutatók és tömbök Minden komolyabb programozási nyelvben vannak tömbök, amelyek gondos kezekben komoly fegyvert jelenthetnek. Először is tanuljunk meg tömböt deklarálni! //Tömbök használata

Részletesebben

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

osztályok kapcsolata Származtatatás C++ Izsó Tamás 2014. március 19. Izsó Tamás Származtatatás/ 1 Származtatatás C++ Izsó Tamás 2014. március 19. Izsó Tamás Származtatatás/ 1 Dinamikus tagváltozó az osztályban class RVektor { i n t n ; R a c i o n a l i s p ; p u b l i c : RVektor ( i n t n=10 ) :

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Elemi alkalmazások fejlesztése III.

Elemi alkalmazások fejlesztése III. Elemi alkalmazások fejlesztése III. Bevezetés Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu people.inf.elte.hu/nacsa/qt4/eaf3/ Qt 4 2007 EAF3 Qt4 Bevezetés (mod01) 1 A Qt assistant nyitó ablaka www.trolltech.com

Részletesebben

Képfájlok beolvasása és megjelenítése

Képfájlok beolvasása és megjelenítése Programozás 3 1 2016 Képfájlok beolvasása és megjelenítése Előzmények Eddig a Rajzolás, Grafika és az Interaktivitás lap programját készítettük el. Ennek a programnak néhány új funkcionalítással ellátott

Részletesebben

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

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat

Részletesebben

1. Alapok. Programozás II

1. Alapok. Programozás II 1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph

Részletesebben

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába A lista eleme 0 adat rész mutató rész Listaelem létrehozása p: Node 0 0 3 0 Az elemet nekünk kell bef zni a listába Deklarálás struct Node { int int value; Node* next; next; adattagok Létrehozás Node*

Részletesebben

Programozás C++ -ban

Programozás C++ -ban 8. Dinamikus objektumok Programozás C++ -ban Ahhoz hogy általános prolémákat is meg tudjunk oldani, szükség van arra, hogy dinamikusan hozhassunk létre vagy szüntethessünk meg objektumokat. A C programozási

Részletesebben

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

Virtuális függvények (late binding) Virtuális függvények (late binding) Miskolci Egyetem Általános Informatikai Tanszék Virtuális függvények CPP5 / 1 Azonos nevű függvények megkülönböztetése paraméterszignatúra (függvény overloading) - egy

Részletesebben

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

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK Sapientia EMTE 2015-16 1 Felülnézet 1 Feltételes fordítás #if, #else, #elif, #endif, #ifdef, #ifndef stb. Felülnézet 2 #include: hatására a preprocesszor

Részletesebben

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon 1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (

Részletesebben

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

Bevezetés a programozásba Előadás: A const Bevezetés a programozásba 2 6. Előadás: A const ISMÉTLÉS Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; }; void Particle::rajzol() { gout

Részletesebben

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás: Java V. szint lyszintű ű tagok A final minősítő Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 05. Java V.: szintű tagok JAVA5 / 1 Példányváltozó Az eddig megismert adattagokból

Részletesebben

Végeselem módszer 7. gyakorlat

Végeselem módszer 7. gyakorlat SZÉCHENYI ISTVÁN EGYETEM ALKALMAZOTT MECHANIKA TANSZÉK Végeselem módszer 7. gyakorlat (kidolgozta: Szüle Veronika egyetemi ts.) Feladat: harang sajátrezgéseinek meghatározása 500 100 500 1000 250 250 1.

Részletesebben

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: Excel objektumok Az excelben az osztályokat úgynevezett class modulokként hozzuk létre. Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: View-ba

Részletesebben

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor. Függvény pointer Több feladat közül futási időben döntöm el, hogy melyiket hajtom végre. A függvényre mutató pointer a függvény kódjának a címére mutat, azon keresztül meghívhatom a függvényt. A pointernek

Részletesebben

Objektumok inicializálása

Objektumok inicializálása Objektumok inicializálása Miskolci Egyetem Általános Informatikai Tanszék Objektumok inicializálása CPP4 / 1 Tartalom public adattagok inicializálása felsorolással konstruktor objektum tömbök osztály típusú

Részletesebben

Bisonc++ tutorial. Dévai Gergely. A szabály bal- és jobboldalát : választja el egymástól. A szabályalternatívák sorozatát ; zárja le.

Bisonc++ tutorial. Dévai Gergely. A szabály bal- és jobboldalát : választja el egymástól. A szabályalternatívák sorozatát ; zárja le. Bisonc++ tutorial Dévai Gergely A Bisonc++ egy szintaktikuselemz -generátor: egy környezetfüggetlen nyelvtanból egy C++ programot generál, ami egy tokensorozat szintaktikai helyességét képes ellen rizni.

Részletesebben

Tájékoztató. Használható segédeszköz: -

Tájékoztató. Használható segédeszköz: - A 35/2016. (VIII. 31.) NFM rendelet szakmai és vizsgakövetelménye alapján. Szakképesítés, azonosító száma és megnevezése 54 481 06 Informatikai rendszerüzemeltető Tájékoztató A vizsgázó az első lapra írja

Részletesebben

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

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag C# osztálydeníció Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem.net C# technológiák tananyag objektum orientált programozás tananyag Tartalom 1 Bevezetés 2 Osztály létrehozása, deníció

Részletesebben

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Bánsághi Anna 2014 Bánsághi Anna 1 of 33 IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 7. ELŐADÁS - ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 1 of 33 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. szeptember 25. 3. El adás User public class User { private String realname_; private String nickname_; private String password_; public User(String realname, String nickname)

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

Szoftvertechnolo gia 7. gyakorlat

Szoftvertechnolo gia 7. gyakorlat Szoftvertechnolo gia 7. gyakorlat Román Gábor 1. Feladat Készítsen az alábbi leírás alapján egy Egyed kapcsolat (EK) diagramot, majd annak alapján Visual Studio 2013-ban Entity Framework entitás diagramot!

Részletesebben

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

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás Számítástechnika II. BMEKOKAA153 2. Előadás Dr. Bécsi Tamás Tömbök (Arrays) Definíció: típus[] név; (pld. int[] szamok; ) Inicializálás: int[] szamok = new int[4]; int[] szamok = 1,2,4,3,5}; int[] szamok

Részletesebben

12. gyakorlat Enum; Tárolási osztályok Preprocesszor utasítások; Moduláris programozás

12. gyakorlat Enum; Tárolási osztályok Preprocesszor utasítások; Moduláris programozás 12. gyakorlat Enum; Tárolási osztályok Preprocesszor utasítások; Moduláris programozás Házi (f0174) Egy sor kiíratási formátuma: "nev: %s; pont: %d;". Olvasd be a kiírt számot úgy, ha tudod, hogy a kiírt

Részletesebben

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák: C++ referencia Izsó Tamás 2017. február 17. 1. Bevezetés A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák: Sokan összetévesztik a pointerrel. Keveset alkalmazzák

Részletesebben

Lakóház tervezés ADT 3.3-al. Segédlet

Lakóház tervezés ADT 3.3-al. Segédlet Lakóház tervezés ADT 3.3-al Segédlet A lakóház tervezési gyakorlathoz főleg a Tervezés és a Dokumentáció menüket fogjuk használni az AutoDesk Architectural Desktop programból. A program centiméterben dolgozik!!!

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 1. rész Osztályok és objektumok Mezık és metódusok Konstruktor és destruktor Névterek és hatókörök Láthatósági szintek Osztály szintő tagok Beágyazott osztályok

Részletesebben

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

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet    Copyright 2008 Johanyák Zsolt Csaba Ugráló gomb Készítsünk egy egyszerű játékprogramot, ami egy mozgó nyomógombot tartalmaz. A nyomógomb beállított ideig marad egy helyben, majd az ablakon számára elhatárolt terület (panel) egy véletlenszerűen

Részletesebben

Widget-ünket a festők vásznáról Canvas-nak nevezzük el. Mit kell a widgetnek tudnia?

Widget-ünket a festők vásznáról Canvas-nak nevezzük el. Mit kell a widgetnek tudnia? A Canvas widget Widget-ünket a festők vásznáról Canvas-nak nevezzük el. Mit kell a widgetnek tudnia? 1. Más widgetekre rárakható legyen, 2. Ha a befoglaló (szülő) widget mérete változik az ő mérete is

Részletesebben

Autodesk Inventor Professional New Default Standard.ipt

Autodesk Inventor Professional New Default Standard.ipt Adaptív modellezési technika használata Feladat: Készítse el az alábbi ábrán látható munkahenger összeállítási modelljét adaptív technikával! 1. Indítson egy új feladatot! New Default Standard.ipt 2. A

Részletesebben

VII. Appletek, grafika

VII. Appletek, grafika VII. Appletek, grafika 1. Bevezetés A tantárgy elején említettük, hogy a Java alkalmazásokat két nagy csoportba sorolhatjuk. Ezek: alkalmazások (applications) alkalmazáskák (applets) Az eddig megírt programjaink

Részletesebben

Lineáris egyenletrendszerek

Lineáris egyenletrendszerek Lineáris egyenletrendszerek 1 Alapfogalmak 1 Deníció Egy m egyenletb l álló, n-ismeretlenes lineáris egyenletrendszer általános alakja: a 11 x 1 + a 12 x 2 + + a 1n x n = b 1 a 21 x 1 + a 22 x 2 + + a

Részletesebben

Eseménykezelés. Aszinkron kommunikáció

Eseménykezelés. Aszinkron kommunikáció Eseménykezelés Aszinkron kommunikáció Feladat Készítsünk egy stoppert, amely másodpercenként jelzi a múló időt. Ez a folyamat egy adott jelzés hatására induljon el; ugyanezen jelzés ismétléseinek hatására

Részletesebben

RAJZ1. vezetett gyakorlat

RAJZ1. vezetett gyakorlat Inventor R4 1 Rajz1. vezetett gyakorlat RAJZ1. vezetett gyakorlat Műhelyrajz készítés A feladat megoldásához szükséges fájlok: Tutorial Files\body1 Feladat: Készítse el a szelepház műhelyrajzát! 1) Indítson

Részletesebben

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

SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME SDI ALKALMAZÁS I. Feladat: Készítsünk egy olyan alkalmazást, amely az év végi adózás céljából rögzíti egyetlen évközi bevételnek az adatait: bruttó jövedelem adóel ı leg nettó bevétel jövedelem forrása

Részletesebben