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

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

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

Átírás

1 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 változzon 3. Mindeközben a rárajzolt kép ne tűnjön el 4. Maradjon meg a tartalma akkor is, ha az őt tartalmazó szülő widgetet lekicsinyítjük, vagy elrejtjük, 5. Tartalmát kitörölhessük. 6. Bármikor rajzolhassunk rá, nem csak egy paintevent()-ben 7. Rajzolhassunk rá az egérrel, tehát kezelje le a megfelelő egér eseményeket 8. Tudjon egyenes és görbe vonalat húzni, 9. Ismerjen néhány egyszerű alakzatot (háromszög, négyszög, ellipszis), 10. Ezeket különböző mintázatokkal ki lehessen tölteni. 11. Képes legyen képek és fotók megjelenítésére, nagyítására, kicsinyítésére, forgatására, stb. 12. Legyen képes képeken különböző szűréseket végezni. 13. Ki lehessen nyomtatni a képet, amit rárajzoltunk, illetve beolvastunk. Ez a lista még bővíthető. Nyilvánvaló, hogy mindez a funkcionalítás csak egy viszonylag bonyolult programmal valósítható meg. Ezért mi lépésenként haladunk: először a rajzolással foglalkozunk csak, a képfeldolgozást később adjuk hozzá. A rajzolás Hagyományos nem esemény vezérelt programokban bármikor rajzolhatunk a képernyőre, és a rajzolás eredménye azonnal meg is jelenik. Esemény vezérelt programokban azonban a képernyőre csak a kirajzolási eseményt kezelő függvényben lehet rajzolni. Magát a rajzolást a QPainter osztály végzi, ami bármilyen QPaintDevice-ból leszármaztatott objektumra tud rajzolni. A QPaintDevice egy absztrakt 2D rajzolási felület, amelynek origója a bal felső sarkában van, az x tengelye vízszintesen jobbra, az y tengelye lefelé mutat és a

2 rajzolási egysége a pixel. A következőek 1 belőle leszármaztatott osztályok: QWidget, QImage, QPixmap, QBitmap, QPicture, és QPrinter. A QImage képek beolvasására, kiírására és pixeleinek módosítására optimalizált,osztály A Qimage tartalma eszközfüggetlen. Egyszínű (monochrome), 8 és 32 bites, illetve alfa csatornával összeolvasztott képeket egyaránt kezel. A képformátumok közül az alábbiakat mind ismeri: BMP Windows Bitmap Read/write GIF Graphic Interchange Format (optional) Read JPG Joint Photographic Experts Group JPEG Joint Photographic Experts Group PNG Portable Network Graphics PBM Portable Bitmap PGM Portable Graymap PPM Portable Pixmap TIFF Tagged Image File Format XBM X11 Bitmap XPM X11 Pixmap Read/write Read/write Read/write Read Read Read/write Read/write Read/write Read/write A QPixmap a képek kirajzolására optimalizált,osztály. A QBitmap egy csupán 1 és 0 pixel értékeket tartalmazó képet tárolhat ezt pl. ecsetek definiálására használhatjuk, a QPicture viszont a rajzolási parancsok megjegyzésére, eltárolására (metafile-ban) és visszajátszására szolgál. A QPainter tehát közvetlenül rajzolhat ezekre. egyszerű egyenes szakaszokat és összetett alakzatokat egyaránt. A következő ún. alap rajzelemeket (drawing primitives) ismeri: pont, vonal, téglalap, kerekített sarkú téglalap, ellipszis, ív, kördiagram, ellipsziscikk/körcikk, töröttvonal, sokszög, convex sokszög és Bezier spline görbe ( drawpoint(), drawpoints(), drawline(), drawrect(), drawroundedrect(), drawellipse(), drawarc(), drawpie(), drawchord(), drawpolyline(), drawpolygon(), drawconvexpolygon() és a drawcubicbezier() ). Tud ezenkívül az aktuális ecsettel kitöltött utakat (path) is kezelni, vagy képeket kirajzolni. 1 Más, itt fel nem sorolt, osztályok is vannak.

3 Ha közvetlenül rajzolunk egy widget-re, akkor azt kizárólag a widget paintevent(qpaintevent *) függvényében 2, vagy egy abból hívott függvényben szabad ezt megtegyük. Ebből az is következik, hogy egy QWidget objektumra nem, csak olyan widget-ekre tudunk rajzolni, amelyeket a QWidgetből leszármaztattunk, hiszen a QWidget paintevent()függvényébe nem tudunk belenyúlni. Miért ez a megkötés? Amikor egy widget-et (pl. egy ablakot) miniatürizálunk, vagy azt egy másik widget teljesen vagy részlegesen eltakarja, akkor annak tartalmát az ablakkezelő rendszer többnyire nem menti el. Amikor a widget eltakart része újra láthatóvá válik, akkor annak tartalmát ismét ki kell rajzolni, ennek érdekében a paintevent() függvény meghívódik 3, így a widget tartalma visszaállítható. A widgetek azon részeit, amiket nem mi rajzolunk ki (pl. egy címke szövegét) ugyanekkor a Qt maga rajzolja újra. Kétféle módszert használhatunk ábrák és képek kirajzolására Az első az, amikor az ábrát, ill képet az elemi rajzolási műveletekből újra és újra előállítjuk. Legegyszerűbben azonban úgy járhatunk el, ha nem közvetlenül a widget-re, hanem egy háttértárolóra rajzolunk. Háttértárolóként egy másik QPaintDevice-ot, pl QImage-t, vagy QPixmap-et használunk, arra bármikor rajzolhatunk és a paintevent()-ben azt rajzoltatjuk ki a widgetre. Ez a módszer a kettős tárolás (Double Buffering). A Canvas egy ilyen alapon működő widget. Háttértárolójaként egy _canvas nevű QImage-t használunk. 2 Emlékeztetünk, hogy a Qt ben az egyes widgetek közötti kommunikáció SIGNAL-SLOT mechanizmusa mellett eseménykezelés is van. Az események az operációs rendszerből származnak, pl amikor a felhasználó mozgatja az egeret, vagy valamilyen widgetnek ki kell magát rajzolnia, akkor az operációs rendszer küld egy üzenetet a Qt alkalmazásnak, ami ennek hatására meghívja valamelyik widget eseménykezelő függvényét. 3 A paintevent() függvény azonban akkor hívódik meg, ha már más esemény nem várakozik az alkalmazás üzenet ciklusában (Message Loop).

4 Általános megjegyzések a) Minden rajzolást a _canvas-ra végzünk. Ahhoz, hogy ezt megtehessük egy minimum akkora QImage-re van szükségünk, int a widgetünk mérete. Amikor a widget mérete megváltozik a _canvas méretét is meg kell változtassuk. Mivel azt akarjuk, hogy a rárajzolt kp akkor is megmaradjon, ha a widget-et összenyomjuk, majd újra megnagyítjuk a _canvas méretét csak növelnünk szabad. Ehhez a nyilvános (public) Resize() függvényt használjuk: // Bármilyen képre jó, ha ez a _canvas, akkor a szülő méretére kell állítani! // Csak nagyobb newsize esetén változtatja meg a méretet void Resize(QImage *image, QSize newsize); Azért választottunk egy nyilvános függvényt, aminek a QImage a paramétere, hogy ne csak a háttértárolóra, hanem tetszőleges más képre is használható legyen. Ezt a függvényt a Canvas widget resizeevent()-jében használjuk majd. Ez az eseménykezelő a widget megjelenítése előtt már meghívódik, ezért a Canvas konstruktorában nem kell használnunk. b) A háttártároló tartalma nem jelenik meg automatikusan a Canvas widget-en. Azt a paintevent()-ben tudjuk csak kirajzolni. A paintevent létrehozására a widgetek update()függvényeinek valamelyikét használjuk, ami a rajzolások után egy Paint Event-et helyez el a widget esemény ciklusába. c) Kitöltött alakzatok rajzolásához csak annyit kell tennünk, hogy a QPainter ecsetjét beállítjuk a rajzolás előtt.

5 A Canvas widget létrehozása és a projekthez adása Először is adjunk hozzá a projekthez egy új fájlt a canvas.h-t! Windows Visual Studio + Qt A Visual Studio alatt:a Solution Explorer-ben kattintsunk a jobb egérgombbal a projekt nevére és válasszuk az Add /New Item menüt! Kattintsunk a Header File sorra, írjuk be a fájl nevét, majd Rendben/Ok. Ugyanígy hozzuk majd létre a canvas.cpp fájlt is, de most foglalkozzunk a header-rel. Windows és Linux Qt creator Qt Creator-ban az Add New menüben felugró ablakban válasszuk ki a C++-t a bal oldalon, a C++ Header File-t a jobb oldalon, tovább lépve adjuk meg a fájl nevét, utána hagyjuk az alapértelmezést meg és kattintsunk a Finish-re! A kétféle módon előállított header fájl különbözik: a Visual Studio-beli egy sort, #pragma once a Qt Creatorral létrehozott a #ifndef CANVAS_H #define CANVAS_H #endif // CANVAS_H sorokat tartalmazza. Mindkettő jó akár windows, akár Linux alatt 4. Ebbe a fájlba (ha van, akkor a #endif elé) először include-oljuk be a szükséges header-eket: #include <QColor> // a színek megadásához #include <QImage> // a rajz tárolására #include <QWidget> // minden widget-hez kell #include <QPainter> // a QPainter rajzol #include <QPaintEvent> // widgetre csak a Paint Event-ben rajzolhatunk #include <QMouseEvent> // egér események (gombnyomás, felengedés, mozgatás) #include <QResizeEvent> // átméretezési esemény Mindenekelőtt deklaráljunk egy osztályt a rajzolásokhoz használt globális paraméterek tárolására: struct RajzParameterek 4 A #pragma once gyorsabb, mert a fordítónak nem kell megkeresnie a #ifdef-et lezáró #endif-et. A másik viszont lehetőséget ad arra, hogy megnézzük egy benne levő osztály, vagy változó definiálva van e.

6 ; int penwidth = 1; Qt::PenStyle penstyle = Qt::SolidLine; Qt::PenCapStyle pencap = Qt::FlatCap; Qt::PenJoinStyle penjoin = Qt::MiterJoin; Qt::BrushStyle brushstyle = Qt::SolidPattern; QColor pencolor = qrgb(0, 0, 0), brushcolor = qrgb(255, 266, 255); Itt egyúttal kezdőértékeket is beállítunk (ez csak a C++11-ben működik). Ezt az osztályt felhasználjuk a Canvas-t használó más programokban, most pl a grafikaqtvel.cpp-ben. Itt hívjuk fel a figyelmet arra, hogy noha bármilyen ecset stílust beállíthatunk, a kirajzolásnál az átmeneteket tartalmazó (gradient) stílusok használata bonyolultabb, mint amit itt kezelünk majd, így azok nem fognak működni! Ezután deklaráljuk az új widget-et: class Canvas : public QWidget Az első sor mint mindig: Q_OBJECT Kényelmi okokból magában a Canvas-ban is tároljuk el lokálisan a globális paramétereket: RajzParameterek _param; Állítsunk be néhány jelzést (A C++11-től kezdve ezt a deklarációban is megtehetjük, nem kell a konstruktorba beírni): bool _modified = false; // nem kell elmenteni a képet bool _drawing = false; // nem rajzolás közben vagyunk bool _freehand = false; // nem szabadkézi rajzolás közben vagyunk Jegyezzük meg az utoljára használt pont helyét: QPoint _lastpoint; // ebben a pontban volt az utolsó rajzolásnál az egérmutató A QPoint egy látszólag felesleges osztály, hiszen csak az egész típusú x és y koordinátákat tartalmazza, ráadásul ezek kiolvasása és módosítása függvényhívásokat igényel. Kiolvasás: x() és y(), ami az értéket adja vissza és rx(), ry(), amelyek referenciát adnak a belső változókra. A módosítás a setx() és sety(), illetve az rx() és ry() függvényekkel történhet 5. Pl. QPoint p; p.setx(p.x() + 1); p.ry() = p.y() + 3; p.rx()++; 5 Ez nem lassítja le a programot, mert a fordító ezeket a függvényeket az aktuális változókkal helyettesíti

7 Ami miatt sokszor azért is kényelmes használni QPoint-ot az az, hogy úgy viselkedik, mint egy origóból húzott vektor, vagyis két QPoint koordinátánként adódik össze és számmal szorozva, ill. osztva mindkét koordináta szorzódik, ill. osztódik. Az isnull() függvénnyel megnézhetjük azt is, hogy nem null vektort adunk e meg, sőt a vektor hosszát 6 (manhattenlength() ) )is lekérhetjük. Természetesen egy QPoint egy másik QPoint-tal egyenlővé is tehető. Használhatjuk alakzatok elmozgatásánál az elmozdulás vektor megadására is. Egy hasonló, de valós koordinátákat használó osztály a QPointF. A tényleges rajzolási területünk, ahova bármikor rajzolhatunk, nem csak egy kirajzolási eseményben (Paint Event-ben) egy QImage: QImage _canvas; // ide rajzolunk A konstruktor és a destruktor a nyilvános részbe kerül: public: Canvas(QWidget *parent = 0); virtual ~Canvas() A virtual kulcsszó azt jelenti, hogy az illető osztályból leszármaztatott osztályokban majd átdefiniálhatjuk ezt. Itt most felesleges, de szokjunk hozzá, hogy megadjuk! A rajzolási paramétereket akár futás közben is megváltoztathatjuk a void SetParameters(RajzParameterek &param) _param = param; függvénnyel. A rajzterület méretét dinamikusan tudjuk változtatni a painteven() eseményben. Ezzel elérhetjük, hogy sohase kelljen feleslegesen memóriát lefoglalva tartani. Erre szolgál a void Resize(QImage *image, QSize newsize); függvény. Adatok lekérdezése: bool IsModified() const return _modified; bool IsDrawing() const return _drawing; bool IsModified() const return _modified; QColor GetPixel(const QPoint &pt); QColor PenColor() const return _pencolor; int PenWidth() const return _penwidth; Qt::PenStyle PenStyle() const return _penstyle; Qt::PenCapStyle PenCapStyle() const return _pencap) ; Qt::PenJoinStyle PenJoinStyle()const return _penjoin; Qt::BrushStyle BrushStyle() const return _brushstyle ; 6 Ez nem az euklideszi hossz, aminek a kiszámítása lassú, hanem az ún. manhattan hossz, ami egyszerűen a koordináták abszolüt értékeinek az összege.

8 Adatok beállítása. Azokat a mezőket, amelyeknek a beállítása egyszerű (pl. egy soros) magába a header fájlba írjuk be. Ezzel a fájl olvasását nem nehezítjük meg. A bonyolultabb függvények definícióját, pl. a SetPixel()-t azonban a canvas.cpp fájlba fogjuk beírni.. void SetPenWidth(int width) _penwidth = width; void SetPenColor(QColor color) _pencolor = color; void SetPenStyle (Qt::PenStyle &v) _penstyle= v; void SetPenCapStyle(Qt::PenCapStyle &v) _pencap= v; void SetPenJoinStyle(Qt::PenJoinStyle &v) _penjoin= v; void SetBrushStyle(Qt::BrushStyle &v) _brushstyle= v; Rajzolások: void SetPixel(const QPoint &pt, QColor color); void LineTo(const QPoint &endpoint); void DrawEllipse(const QRect &rect); void DrawRect(const QRect & rect); void DrawFillRect(const QRect & rect); void DrawArc(double start, double end); // egy pont kirajzolása A teljes rajzterület törlése: void Clear(); A szabadkézi rajzolást a StartFreeHandDrawing() engedélyezi és a StopFreehandDrawing() tiltja le. Ezek nagyon egyszerűek: void StartFreeHandDrawing() _freehand = true; void StopFreehandDrawing() _freehand = false; A widget méretének megváltoztatását a resizeevent()-ben kezeljük le. Ez fogja meghívni a Canvas Resize() függvényét. A szabadkézi rajzoláshoz le kell kezelni az egér állapotát és mozgását. Mivel ezek az operációs rendszertől származó információk, ezeket eseményekben kell beállítanunk. A QWidget osztályban ezek az események protected-ek, legyenek azok itt is! protected: void mousepressevent(qmouseevent *event) Q_DECL_OVERRIDE; void mousemoveevent(qmouseevent *event) Q_DECL_OVERRIDE; void mousereleaseevent(qmouseevent *event) Q_DECL_OVERRIDE; void paintevent(qpaintevent *event) Q_DECL_OVERRIDE; void resizeevent(qresizeevent *event) Q_DECL_OVERRIDE; A Q_DECL_OVERRIDE azonos a C++ override specifikációjával, aminek hatására a fordító ellenőrzi, hogy az adott függvények valóban egy alap osztálybeli függvényt írnak-e felül. Most tudjuk, hogy ez a helyzet, így el is hagyhattuk volna. Ezzel az osztály deklarációja elkészült. Zárjuk be:

9 ; Ha a header fájl védelmére nem a #pragma once opciót választottuk, akkor a heder file utolsó sora #endif kell legyen. A teljes kód a fájl végén megtalálható Az új widget hozzáadása a szerkesztőhöz Kattintsunk a jobb oldali Stacked Widget-re (neve pnlright)! A Property Editor-ban állítsuk be az első oldalt. Rakjunk rá egy Widget-et és állítsuk be bármelyik elrendezést. Ezzel a widget a teljes jobb oldalt kitölti. A jobb egérgombal előhozott egérmenűben válasszuk ki a Promote to pontot! Egy dialógus ablak jelenik meg: A Promoted class name mezőbe a Canvas, a header file mezőbe a canvas.cpp szöveget írjuk be és nyomjuk meg az Add gombot!:

10 Nyomjuk meg a Promote gombot, majd a Property Editor-ban írjuk át a widget nevét canvasra! Az új widget programja (canvas.cpp) Adjunk a projektünkhöz egy új cpp fájlt és nevezzük el canvas.cpp-nek! Mindenekelőtt include-oljuk be a canvas.h-t A konstruktor: #include "canvas.h" Canvas::Canvas(QWidget *parent) : QWidget(parent) Egyelőre semmit nem csinálunk benne. A Resize() függvény void Canvas::Resize(QImage *image, QSize newsize)

11 Mivel csak nagyobb új méret esetén akarjuk a _canvas-t átméretezni, először helyettesítsünk minden kisebb új méretet az eredetivel if (newsize.width() < image->width()) newsize.setwidth(image->width()); if (newsize.height() < image->height()) newsize.setheight(image->height()); Ha nem volt változás nem kell átméretezni if (newsize.width() == image->width() && newsize.height() == image- >height()) return; Volt méret növekedés. Létrehozunk egy ideiglenes QImage-t az új mérettel Kitöröljük a tartalmát: QImage newimage(newsize, QImage::Format_RGB32); newimage.fill(qrgb(255, 255, 255)); Átmásoljuk rá a régi képet a QPainter drawimage() függvényével: QPainter painter(&newimage); painter.drawimage(qpoint(0, 0), *image); Átmásoljuk az új QImage-t a háttértároló QImage-re. Ez annak méreteit is megváltoztatja: És befejeztük. A resizeevent() *image = newimage; void Canvas::resizeEvent(QResizeEvent *event) Kiszámoljuk a héttértároló új néretét Átméretezzük a tárolót int newwidth = qmax(width() + 128, _canvas.width()); int newheight = qmax(height() + 128, _canvas.height()); Resize(&_canvas, QSize(newWidth, newheight)); Meghívjuk az eredeti átméretezési eseményt, csináljon meg mindent, amit még esetleg kell. QWidget::resizeEvent(event);

12 A paintevent() Egy widget tartalmát kizárólag az ő Paint Event-jében szabad kirajzolni void Canvas::paintEvent(QPaintEvent *event) A QPainter erre a widgetre rajzolja majd a háttértároló tartalmának kijelölt részét 7 : QPainter painter(this); Csak ezt a területet fogja módosítani QRect dirtyrect = event->rect(); Kirajzoljuk a háttértároló tartalmát: A teljes rajzterület törlése: painter.drawimage(dirtyrect, _canvas, dirtyrect); Ez valójában csak a háttértároló fehér színnel való kitöltését jelenti: void Canvas::Clear() _canvas.fill( qrgb(255, 255, 255) ); Elmentjük az utolsó pozícióba a bal felső sarkot _lastpoint = QPoint(0, 0); és beállítjuk, hogy a kép módosult _modified = true; Az update() hívás újra rajzoltatja a teljes widget-et. update(); Egy pixel beállítása: void Canvas::setPixel(const QPoint &pt, QColor color) _canvas.setpixel(pt, color.rgb()); _lastpoint = pt; update(); Alakzatok kirajzolása 7 Szemben az eddigiekkel, amelyekben a háttértárolóra rajzoltunk. Oda bármikor lehetett, a widgetre csak itt.

13 Először az egyszerűbb eseteket, a rögzített alakzatok kirajzolását tárgyaljuk. Ezekhez a QPainter meglevő függvényeit használjuk, tehát a Canvas osztály függvényeiben csak a paramétereket kell beállítanunk a QPainter számára. A tulajdonképpeni munkát a QPainter végzi el. Egyenes vonal húzása két pont között A vonalhúzást az utolsó használt pontban kezdjük és az endpoint-ban fejezzük be. void Canvas::lineTo(const QPoint &endpoint) Létrehozunk egy QPainter-t a rajzoláshoz QPainter painter(&_canvas); Beállítjuk az aktuális toll paramétereket painter.setpen(qpen(_pencolor, _penwidth, _penstyle, _pencap, _penjoin)); Meghúzzuk a vonalat és beállítjuk, hogy a kép módosult: painter.drawline(_lastpoint, endpoint); _modified = true; Ezután frissítjük a képnek azt a részét ahová a vonalat húztuk. Ehhez az update() nek azt a formáját használjuk, amiben megadjuk a frissítendő téglalapot. Ehhez egy ideiglenes QRect objektumot használunk

14 A QRect objektum egy egész számokkal megadott téglalapot határoz meg. A téglalapot megadhatjuk bal felső sarkának koordinátáival, szélességével és magasságával: QRect ::QRect(int left, int top, int width, int height); de ezeket egy QPoint és egy QSize objektummal is kifejezhetjük: QRect ::QRect(QPoint lefttop, QSize widthheight ) ; A téglalap adatait természetesen utólag, külön - külön is beállíthatjuk, módosíthatjuk, illetve lekérdezhetjük. A Qt-ban szokásos elnevezési konvenció szerint a beállítások függvénynevei settel kezdődnek és a lekérdezések nevével folytatódna, csak azok ilyenkor nagy betűvel kezdődnek: pl lekérdezés: left(), beállítás setleft(). Egy QRect objektumot sokféle módon manipulálhatunk. Egyik hasznos lehetőség a teljes négyszög bal felső pontját eltolni egy tetszőleges pontba a moveto(int x, int y), vagy moveto(qpoint topleft) függvényekkel, vagy eltolni egy adott dx,dy vektorral a translate(int dx, int dy), vagy translate(qpoint dvector) függvényeket használva. Ezeknek van olyan változatuk is (translated(int dx, int dy), vagy translated(qpoint dvector)), amelyik az eredeti QRect-et nem változtatja meg, hanem létrehoz egy újat az adott transzformáció után. Mivel egy QRect objektum adatait úgy is megadhatjuk, hogy a szélessége és magassága negatív legyen a QRect::normalized() függvény egy olyan másik QRect-et ad vissza, amiben a szélesség és a magasság pozitív. A QRect::adjust(int dx1, int dy1, int dx2, int dy2) függvény a téglalap minden méretét megváltoztatja, míg a QRect::adjusted() egy másik ideiglenes téglalapot ad vissza, amely az eredeti koordináták megváltoztatásával adódik.

15 A méreteket lekérdezhetjük a QSize size(), vagy a width() és height() függvényekkel. Egyéb lekérdezések is vannak, de a bottom() és right() függvényeket ne használjuk! Azok hibás értékeket adnak vissza! Használjuk helyettük a jobb alsó sarok x és y koordinátájának a meghatározásához a left()+width(), ill. top()+height() formulákat! A contains(const QPoint &pont, bool csakbelül = false) const függvény megadja, hogy az adott pont a téglalapban belül van-e. Ha csakbelül = true, akkor a kerületen levő pontok nem számítanak téglalaphoz. Azt, hogy két téglalapnak van e közös pontja a bool intersects(const QRect másik) függvény adja meg. A két téglalap metszetének megfelelő téglalapot az intersected(const QRect másik), unióját a united(const QRect másik) függvénnyel kaphatjuk meg. Érdemes megjegyezni, hogy ha R, r és s QRect-ek, akkor a következőek ekvivalensek: R = r.intersected(s); R = s.intersected(r); és R = r & s; R = r.united(s); R = s.united(r); és R = r s; A QRectF a QRect valós számokat használó megfelelője. A biztonság kedvéért egy kis rátartással dolgozunk (a képlet magyarázatát a téglalap kirajzolásánál adjuk meg) : int rad = (_penwidth / 2) + 2; update(qrect(_lastpoint, endpoint).normalized().adjusted(-rad, -rad, +rad, +rad)); Végül beállítjuk az utoljára használt pontot _lastpoint = endpoint;

16 Téglalap A QPainter kétféle téglalapot rajzol ki. Az egyiknek nincs kerete, vagyis, hacsak az ecsetnek nincs színe, nem is látható: Ez a QPainter ::fillrect(). A másik keretet rajzol és, ha az ecsetet külön nem állítjuk be nem tölti ki annak belsejét. Ez a QPainter drawrect(). Most mindkettőt használjuk bár elég lenne a második is az ecset beállításával. A téglalap felrajzolásának függvénye: void Canvas::DrawRect(const QRect & rect, bool fill) Létrehozzuk a festőt QPainter painter(&_canvas); Beállítjuk a tollat painter.setpen(qpen(_param.pencolor, _param.penwidth, _param.penstyle, _param.pencap, _param.penjoin)); És szükség szerint (fill == true) az ecsetet is. A kitöltött, de keret nélküli téglalapra a fillrect() függvényt használjuk if (fill) painter.fillrect(rect, QBrush(_param.brushColor, _param.brushstyle)); A keretet a drawrect.() rajzolja ki painter.drawrect(rect); _modified = true; Kérjük meg a rendszert, hogy az elő adandó alkalommal 8 küldjön kirajzolási üzenetet a widgetnek: int rad = (_param.penwidth / 2) + 2; update(rect.normalized().adjusted(-rad, -rad, +rad, +rad)); A csak drawrect()-et használó, alternatív, téglalap rajzoló programrész így nézne ki: if (fill) painter.setbrush(qbrush(_param.brushcolor, _param.brushstyle)); painter.drawrect(rect); Matematikailag egy téglalapot végtelenül vékony szakaszok határolnak. Kirajzolásnál azonban a toll vastagsága befolyásolja milyen lesz a kirajzolt téglalap: 8 Azaz, amikor nincs már más üzenet az üzenetciklusban.

17 Ezért a frissítendő téglalap általában nagyobb, mint a matematikai. Balra és fent a toll szélességének felével, jobbra és lent páros vastagságú toll esetén ugyanennyivel, páratlan vastagságú esetén ennél 1 pixellel többel. Az egyszerűség kedvéért azonban mi mindegyik esetben a szükségesnél 2+2 pixellel nagyobb téglalapot veszünk. 1 pixelnél nagyobb vonalvastagság esetén a körvonal egy része lemaradhat a képről, ha a befoglaló téglalap valamely oldala érintkezik az widget szélével. A többi alakzat rajzolása erre a kaptafára történik. Az ellipszisr egy olyan befoglaló QRect téglalapba kerül, amivel az oldalak közepén érintkezik 9. Kirajzolásához a QPainter::drawEllipse(rect) függvényt használjuk. Kör esetében a paraméterek a befoglaló négyzet bal felső sarka és a kör sugara. 9 Ha olyan kirajzolást akarunk megadni, ami az ellipszi középpontját a téglalap középpontjába rakja, a koordináták transzformációjáról nekünk kell gondoskodnunk.

18 A szabályos háromszög és sokszög 10 esetében nem téglalapot, hanem oldalhosszat, illetve oldal hosszat és oldalszámot kell megadni. Ezeket a QPainter::drawPolygon(QPointF* pontok, int darab) függvénnyel rajzoljuk ki. Tetszőleges zárt sokszög kirajzolása A sokszögek kirajzolására szolgáló függvényünk egy, a pontok koordinátáit tartalmazó, vektort és egy kitöltést jelző flag-et vár.: void Canvas::DrawPolygon(const QVector<QPointF> points, bool fill) Azzal kezdjük, hogy ésszerű pont darabszámot kezelünk csak le 11 : Létrehozzuk a festőt if (points.size() < 3 points.size() > 100) // értelmes korlát a lehetséges pontokra return; QPainter painter(&_canvas); Beállítjuk a tollat painter.setpen(qpen(_param.pencolor, _param.penwidth, _param.penstyle, _param.pencap,_param.penjoin)); És szükség szerint az ecsetet is. if (fill) painter.setbrush(qbrush(_param.brushcolor,_param.brushstyle)) ; Kirajzoljuk a sokszöget. A drawpolygon az utolsó pontot automatikusan összeköti az elsővel. painter.drawpolygon( points.data(), points.size() ); A kép megváltozott _modified = true; Határozzuk meg a befoglaló téglalapot, ami megadja az újrarajzolandó területet! double minx = 10000, maxx = , miny = 10000, maxy = ; for (int i = 0; i < points.size(); ++i) if (minx > points[i].x()) minx = points[i].x(); if (maxx < points[i].x()) maxx = points[i].x(); if (miny > points[i].y()) miny = points[i].y(); if (maxy < points[i].y()) maxy = points[i].y(); Módosítsuk a toll vastagság szerint QRect rect = QRect(minx, miny, maxx, maxy); int rad = (_param.penwidth / 2) + 2; Kérjük meg a rendszert, hogy rajzolja újra a képet: 10 A szabályos háromszöget kirajzolhatjuk, mint egy 3 oldalú szabályos sokszöget. 11 Jó programban hiba esetén visszajelzést is kell adjunk a felhasználóknak. Itt ettől eltekintünk.

19 update(rect.normalized().adjusted(-rad, -rad, +rad, +rad)); A szabadkézi rajz Szabadkézi rajz üzemmódban a rajzolás a bal egér gomb lenyomásával kezdődik és felengedésével végződik. Közben az egérmozgást kell lekövetnünk. Mindezek egy egy esemény lekezelését jelentik: void mousepressevent(qmouseevent *event) Q_DECL_OVERRIDE; void mousemoveevent(qmouseevent *event) Q_DECL_OVERRIDE; void mousereleaseevent(qmouseevent *event) Q_DECL_OVERRIDE; A QMouseEvent esemény (többek között) az alábbi információkat tartalmazza: 1. Qt::MouseButton button() const Melyik gomb keltette ezt az eseményt. Ha az esemény az egér mozgása, akkor ez mindig Qt::NoButton. Maximum 27 nem görgető gombhoz 12 tartozó szám jelenhet meg itt. Leggyakrabban a Qt::LeftButton, Qt::RightButton és Qt::MiddleButton értékeket használjuk. 2. Qt::MouseButtons buttons() const (figyeljünk az s-re a név végén!) Milyen gombok voltak lenyomva, amikor az esemény létrejött. A nyomva tartott nem görgető gombokhoz tartozó számok OR-ral összekapcsolva. 3. QPoint pos() const, int x() const, int y() const Az egér koordinátái annak a widget-nek a bal felső sarkához nézve, ami felett megnyomtuk az egér gombját. 4. QPointF screenpos() Elvileg az egér koordinátái a képernyőhöz képest 5. Qt::KeyboardModifiers modifiers() Ez minden beviteli esemény esetén létezik: azok a speciális billentyűk, amelyek közvetlenül az (egér) esemény előtt lenyomva voltak (Ctrl, Alt, Windows gomb) 12 A görgetés az egéren levő gomb(okk)al egy speciális QWheelEvent esemény, nem gombként kell lekezelni. Mobil eszközökön a QTouchEvent eseményeket is le kell kezeljük.

20 Amikor az egér bal gombját megnyomjuk akkor ellenőrizzük, hogy szabadkézi rajz módban vagyunk e, és, ha igen, akkor a _drawing jelzővel jelezzük, hogy mostantól szabad rajzolnunk a mousemove() eseményben. void Canvas::mousePressEvent(QMouseEvent *event) if (event->button() == Qt::LeftButton) if(_freehand) _drawing = true; A tulajdonképpeni rajzolást a mousemove() eseményben végezzük el, amennyiben rajzolás közben vagyunk, azaz _drawing == true: void Canvas::mouseMoveEvent(QMouseEvent *event) if (_drawing) LineTo(event->pos()); A bal egérgomb felengedésével a rajzolást befejezzük. Ezt a _drawing false-ra állításával tesszük meg. Mivel rajzolás közben benyomhattunk másik egérgombot is a felengedésnél ellenőriznünk kell melyiket engedtük fel. Meghúzzuk az utolsó vonaldarabot 13, majd az egér koordinátáját beállítjuk az utolsó használt pont koordinátájának: void Canvas::mouseReleaseEvent(QMouseEvent *event) if (_drawing & event->button() == Qt::LeftButton) LineTo(event->pos()); _lastpoint = event->pos(); _drawing = false; Fordítsuk le a programot és próbáljuk ki a szabadkézi rajzolást! Azt fogjuk tapasztalni, hogy függetlenül a toll beállításaitól a rajzunk mindig nagyon hasonló lesz és nem tükrözi a toll stílusának beállított értékeket. Mi ennek az oka? Hogyan lehetne kijavítani? Egyszerű e a javítás? 13 Ha ezt nem tennénk meg, akkor egy pontot nem tudnánk kirajzolni az egérrel.

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

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

if(_param.antialias) painter.setrenderhint(qpainter::antialiasing, true);

if(_param.antialias) painter.setrenderhint(qpainter::antialiasing, true); Elmosás (antialias) struct RajzParameterek int penwidth = 1; Qt::PenStyle penstyle = Qt::SolidLine; Qt::PenCapStyle pencap = Qt::FlatCap; Qt::PenJoinStyle penjoin = Qt::MiterJoin; Qt::BrushStyle brushstyle

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

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

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 4. Előadás Dr. Bécsi Tamás A RadioButton komponens Tulajdonságok: bool Checked Állapotjelző két állapot esetén: (true: bejelölve,false: nem bejelölve) Események: Esemény

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

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

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

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

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

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

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák.

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák. AWT Grafika Bevezető Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák. Fogalmak: geometriai alakzatok, felületek,

Részletesebben

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015 Objektumorientált programozás Pál László Sapientia EMTE, Csíkszereda, 2014/2015 10. ELŐADÁS Grafika VB.NET-ben 2 Grafikus objektumok Tervezési időben létrehozható grafikus elemek: PictureBox (kép) RectangleShape

Részletesebben

Imagine Logo Tanmenet évfolyam

Imagine Logo Tanmenet évfolyam Imagine Logo Tanmenet 5. 6. 7. évfolyam 5. évfolyam 18. óra: Algoritmus fogalma, hétköznapi algoritmusok. Tkv. 72-73. oldal feladatai + Imagine Logo Demóválasztás (Játékok) 19. óra: Térbeli tájékozódást

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

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás Programozás BMEKOKAA146 Dr. Bécsi Tamás 8. előadás Visszatekintés A Windows Console alkalmazások egy karakteres képernyőt biztosítottak, ahol a kimenet a kiírt szöveg, míg a bemenet a billentyűzet volt.

Részletesebben

Programozási nyelvek 1. előadás

Programozási nyelvek 1. előadás Programozási nyelvek 1. előadás I. A nyelv története Logo Seymour Papert, 1968,1969 - szövegkezelés, M.I.T. Később: grafika, mikroszámítógépekre átdolgozva Cél: minél kisebb gyerekeknek is, természetes

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

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

Programozás II gyakorlat. 6. Polimorfizmus

Programozás II gyakorlat. 6. Polimorfizmus Programozás II gyakorlat 6. Polimorfizmus Típuskonverziók C-ben: void * ptr; int * ptr_i = (int*)ptr; Ez működik C++-ban is. Használjuk inkább ezt: int * ptr_i = static_cast(ptr); Csak egymással

Részletesebben

Mesh generálás. IványiPéter

Mesh generálás. IványiPéter Mesh generálás IványiPéter drview Grafikus program MDF file-ok szerkesztéséhez. A mesh generáló program bemenetét itt szerkesztjük meg. http://www.hexahedron.hu/personal/peteri/sx/index.html Pont létrehozásához

Részletesebben

CAD-ART Kft. 1117 Budapest, Fehérvári út 35.

CAD-ART Kft. 1117 Budapest, Fehérvári út 35. CAD-ART Kft. 1117 Budapest, Fehérvári út 35. Tel./fax: (36 1) 361-3540 email : cad-art@cad-art.hu http://www.cad-art.hu PEPS CNC Programozó Rendszer Oktatási Segédlet Laser megmunkálás PEPS 4 laser megmunkálási

Részletesebben

Mechatronika segédlet 3. gyakorlat

Mechatronika segédlet 3. gyakorlat Mechatronika segédlet 3. gyakorlat 2017. február 20. Tartalom Vadai Gergely, Faragó Dénes Feladatleírás... 2 Fogaskerék... 2 Nézetváltás 3D modellezéshez... 2 Könnyítés megvalósítása... 2 A fogaskerék

Részletesebben

QGIS szerkesztések ( verzió) Összeállította: dr. Siki Zoltán verzióra aktualizálta: Jáky András

QGIS szerkesztések ( verzió) Összeállította: dr. Siki Zoltán verzióra aktualizálta: Jáky András QGIS szerkesztések (2.18.3 verzió) Összeállította: dr. Siki Zoltán 2.18.3. verzióra aktualizálta: Jáky András (jakyandras@gmail.com) A QGIS számtalan vektorszerkesztési műveletet biztosít. Tolerancia beállítások

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

Mechatronika segédlet 1. gyakorlat

Mechatronika segédlet 1. gyakorlat Mechatronika segédlet 1. gyakorlat 2017. február 6. Tartalom Vadai Gergely, Faragó Dénes Indítás, kezelőfelület... 2 Négyzet... 4 Négyzet rajzolásának lépései abszolút koordinátákkal... 4 Kocka, 3D eszközök...

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

BME MOGI Gépészeti informatika 15.

BME MOGI Gépészeti informatika 15. BME MOGI Gépészeti informatika 15. 1. feladat Készítsen alkalmazást a y=2*sin(3*x-π/4)-1 függvény ábrázolására a [-2π; 2π] intervallumban 0,1-es lépésközzel! Ezen az intervallumon a függvény értékkészlete

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

Word VI. Lábjegyzet. Ebben a részben megadhatjuk, hogy hol szerepeljen a lábjegyzet (oldal alján, szöveg alatt).

Word VI. Lábjegyzet. Ebben a részben megadhatjuk, hogy hol szerepeljen a lábjegyzet (oldal alján, szöveg alatt). Word VI. Lábjegyzet A számozást minden oldalon vagy minden szakaszban újrakezdhetjük. Mutassunk a Beszúrás menü Hivatkozás pontjára, majd kattintsunk a Lábjegyzet parancsra. Ebben a részben megadhatjuk,

Részletesebben

Eseményvezérelt alkalmazások fejlesztése II 3. előadás. Windows Forms dinamikus felhasználói felület, elemi grafika

Eseményvezérelt alkalmazások fejlesztése II 3. előadás. Windows Forms dinamikus felhasználói felület, elemi grafika Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése II 3. előadás Windows Forms dinamikus felhasználói felület, elemi grafika 2015 Giachetta Roberto groberto@inf.elte.hu

Részletesebben

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter Információ megjelenítés Számítógépes ábrázolás Dr. Iványi Péter Raszterizáció OpenGL Mely pixelek vannak a primitíven belül fragment generálása minden ilyen pixelre Attribútumok (pl., szín) hozzárendelése

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

Függvények Függvények

Függvények Függvények teknőc parancsok ismétlése függvények fogalma, használata grafikon rajzoló program Reversi játékprogram függvények lokális változói rekurzió és fraktál-szerű ábrák rajzolása Emlékeztető töbszörös elágazás

Részletesebben

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

Ugráló gomb oktatási segédlet Ugráló gomb 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

C programozási nyelv Pointerek, tömbök, pointer aritmetika

C programozási nyelv Pointerek, tömbök, pointer aritmetika C programozási nyelv Pointerek, tömbök, pointer aritmetika Dr. Schuster György 2011. június 16. C programozási nyelv Pointerek, tömbök, pointer aritmetika 2011. június 16. 1 / 15 Pointerek (mutatók) Pointerek

Részletesebben

Képszerkesztés. Letölthető mintafeladatok gyakorláshoz: Minta teszt 1 Minta teszt 2. A modul célja

Képszerkesztés. Letölthető mintafeladatok gyakorláshoz: Minta teszt 1 Minta teszt 2. A modul célja Képszerkesztés Letölthető mintafeladatok gyakorláshoz: Minta teszt 1 Minta teszt 2 A modul célja Az ECDL Képszerkesztés alapfokú követelményrendszerben (Syllabus 1.0) a vizsgázónak értenie kell a digitális

Részletesebben

Név Magasság Szintmagasság tető 2,700 koszorú 0,300 térdfal 1,000 födém 0,300 Fsz. alaprajz 2,700 Alap -0,800

Név Magasság Szintmagasság tető 2,700 koszorú 0,300 térdfal 1,000 födém 0,300 Fsz. alaprajz 2,700 Alap -0,800 Építész Informatika Batyu Előveszünk egy Új lapot 1. Szintek beállítása Lenullázzuk!!!!! A táblázat kitöltését az Alap szinten kezdjük az alap alsó síkjának megadásával. (-0,800) Beírni csak a táblázatba

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

Programozási nyelvek 2. előadás

Programozási nyelvek 2. előadás Programozási nyelvek 2. előadás Logo forgatás tétel Forgatás tétel Ha az ismétlendő rész T fok fordulatot végez és a kezdőhelyére visszatér, akkor az ismétlések által rajzolt ábrák egymás T fokkal elforgatottjai

Részletesebben

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010 Programozási technikák Pál László Sapientia EMTE, Csíkszereda, 2009/2010 9. ELŐADÁS Grafika Delphiben 2 Grafikus objektumok Tervezési időben létrehozható grafikus elemek: TImage (kép) TShape (alakzat)

Részletesebben

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = +

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = + BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra 1. feladat Készítsen alkalmazást az = + függvény ábrázolására! Az értelmezési tartomány a [-6;5] intervallum, a lépésköz 0,1 legyen!

Részletesebben

Közös keret egy objektumhalmazra

Közös keret egy objektumhalmazra Közös keret egy objektumhalmazra A lenti példán jól látható, hogy az eredeti címfelirat és a kredit doboza egyetlen fehér kereten osztozik. Ezt a rétegekre tett külön keretekkel sehogy se lehet megoldani,

Részletesebben

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

Qt rajzolás munkafüzet. Elemi Alkalmazások fejlesztése 3. Qt rajzolás munkafüzet Elemi Alkalmazások fejlesztése 3. 1. fejezet Impresszum Qt rajzolás munkafüzet (C)2006 Zimler Attila Tamás Visszajelzéseket szivesen fogadok. A munkafüzet

Részletesebben

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) b) Minden belső pont kirajzolásával (kitöltött)

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) b) Minden belső pont kirajzolásával (kitöltött) Grafikus primitívek kitöltése Téglalap kitöltése Poligon kitöltése Kör, ellipszis kitöltése Kitöltés mintával Grafikus primitívek kitöltése Területi primitívek: Zárt görbék által határolt területek (pl.

Részletesebben

Téglalap kijelölés opciói

Téglalap kijelölés opciói Kijelölés Téglalap kijelölés opciói Hozzunk létre egy új képet (méret: 640x400)!.Téglalap kijelölő eszköz kiválasztása. Kijelölés-szerkesztő megnyitása. Kijelölés megrajzolása Opciók: 4. Élsímítás 5. Lágy

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

KÉPERNYŐKÉP KÉSZÍTÉSE

KÉPERNYŐKÉP KÉSZÍTÉSE KÉPERNYŐKÉP KÉSZÍTÉSE Ez a segédlet azért készült, hogy segítséget nyújtson az ÉTDR hibabejelentés mellé csatolandó képernyőkép készítéséhez. Készült: 2015. 02. 25. Tartalom Bevezető... 3 Windows operációs

Részletesebben

QGIS tanfolyam (ver.2.0)

QGIS tanfolyam (ver.2.0) QGIS tanfolyam (ver.2.0) I. Rétegkezelés, stílusbeállítás 2014. január-február Összeállította: Bércesné Mocskonyi Zsófia Duna-Ipoly Nemzeti Park Igazgatóság A QGIS a legnépszerűbb nyílt forráskódú asztali

Részletesebben

Egyéb 2D eszközök. Kitöltés. 5. gyakorlat. Kitöltés, Szöveg, Kép

Egyéb 2D eszközök. Kitöltés. 5. gyakorlat. Kitöltés, Szöveg, Kép 5. gyakorlat Egyéb 2D eszközök Kitöltés, Szöveg, Kép Kitöltés A kitöltés önálló 2D-s elemtípus, amely egy meghatározott felület sraffozására, vagy egyéb jellegű kitöltésére használható. Felület típusú

Részletesebben

1.A. feladat: Programablakok

1.A. feladat: Programablakok 1.A. feladat: Programablakok Nyisd meg sorban a Sajátgép mappát, Hálózatok mappát, indítsd el az Internet Explorer programot. Ehhez kattints kettőt mindegyik asztalon lévő ikonjára. Ha egy ablak teljes

Részletesebben

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

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

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

Bevezetés a programozásba előadás: Öröklődés

Bevezetés a programozásba előadás: Öröklődés Bevezetés a programozásba 2 5. előadás: Öröklődés emlékeztető Tagfüggvény struct koord { double x,y,r; void set(double ux, double uy) { x=ux; y=uy; r=sqrt(x*x+y*y); } Használat: koord k; k.set(4,5); Egységbezárás

Részletesebben

Táblázatok. Táblázatok beszúrása. Cellák kijelölése

Táblázatok. Táblázatok beszúrása. Cellák kijelölése Táblázatok Táblázatok beszúrása A táblázatok sorokba és oszlopokba rendezett téglalap alakú cellákból épülnek fel. A cellák tartalmazhatnak képet vagy szöveget. A táblázatok használhatók adatok megjeleníté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

Photofiltre használata KAP képek javításához

Photofiltre használata KAP képek javításához Photofiltre használata KAP képek javításához A program innen letölthető angol nyelven: http://www.photofiltre-studio.com/pf7-en.htm A magyarosított verziót felbővítettem maszkokkal, keretekkel, kijelölési

Részletesebben

BME MOGI Gépészeti informatika 6.

BME MOGI Gépészeti informatika 6. BME MOGI Gépészeti informatika 6. 1. feladat Készítsen Windows Forms alkalmazást véletlen adatokkal létrehozott körök kölcsönös helyzetének vizsgálatára! Hozza létre a következő struktúrákat, melynek elemei

Részletesebben

EDInet Connector telepítési segédlet

EDInet Connector telepítési segédlet EDInet Connector telepítési segédlet A cégünk által küldött e-mail-ben található linkre kattintva, a következő weboldal jelenik meg a böngészőben: Az EdinetConnectorInstall szövegre klikkelve(a képen pirossal

Részletesebben

Táblázatkezelés 2. - Adatbevitel, szerkesztés, formázás ADATBEVITEL. a., Begépelés

Táblázatkezelés 2. - Adatbevitel, szerkesztés, formázás ADATBEVITEL. a., Begépelés Táblázatkezelés 2. - Adatbevitel, szerkesztés, formázás ADATBEVITEL a., Begépelés Az adatok bevitelének legegyszerűbb módja, ha a táblázat kijelölt cellájába beírjuk őket. - számok (numerikus adatok) -

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

Prezentáció, Diagramok, rajzolt objektumok. Szervezeti diagram

Prezentáció, Diagramok, rajzolt objektumok. Szervezeti diagram A szervezeti diagram fogalma A szervezet egy többé-kevésbé állandó tagsággal rendelkező, emberekből álló csoport, melynek van egy vezető rétege. (forrás: Dr. Sediviné Balassa Ildikó: Szervezési Ismeretek

Részletesebben

Programozás C és C++ -ban

Programozás C és C++ -ban Programozás C és C++ -ban 2. További különbségek a C és C++ között 2.1 Igaz és hamis A C++ programozási nyelv a C-hez hasonlóan definiál néhány alap adattípust: char int float double Ugyanakkor egy új

Részletesebben

Alkalmazott modul: Programozás

Alkalmazott modul: Programozás Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás Feladatgyűjtemény Összeállította: Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Frissítve: 2015.

Részletesebben

8. gyakorlat Pointerek, dinamikus memóriakezelés

8. gyakorlat Pointerek, dinamikus memóriakezelés 8. gyakorlat Pointerek, dinamikus memóriakezelés Házi ellenőrzés Egy számtani sorozat első két tagja A1 és A2. Számítsa ki a sorozat N- dik tagját! (f0051) Egy mértani sorozat első két tagja A1 és A2.

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

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

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

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

Programozási alapismeretek 4.

Programozási alapismeretek 4. Programozási alapismeretek 4. Obejktum-Orientált Programozás Kis Balázs Bevezetés I. Az OO programozási szemlélet, egy merőben más szemlélet, az összes előző szemlélettel (strukturális, moduláris, stb.)

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

16/8/4 CSATORNÁS Real Time MPEG-4DVR. 16/8/4 CSATORNÁS beépített DVD-RW íróval vagy CD-RW íróval

16/8/4 CSATORNÁS Real Time MPEG-4DVR. 16/8/4 CSATORNÁS beépített DVD-RW íróval vagy CD-RW íróval AVC78X QUICK START 1 GYORS INDÍTÁS 16/8/4 CSATORNÁS Real Time MPEG-4DVR 4 CSATORNÁS 16/8/4 CSATORNÁS 16/8/4 CSATORNÁS beépített DVD-RW íróval vagy CD-RW íróval 1. Győződjön meg arról, hogy a csomag tartalmazza

Részletesebben

Form1 Form Size 400;400 Text Mozgó kör timer1 Timer Enabled True Interval 100

Form1 Form Size 400;400 Text Mozgó kör timer1 Timer Enabled True Interval 100 BME MOGI Gépészeti informatika 16. 1. feladat Írjon alkalmazást, melyben egy 4 pixel sugarú, pirosra kifestett kört egy másik körön mozgat! A mozgást időzítő vezérelje! Megoldási mód: Windows Forms alkalmazás

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

Választó lekérdezés létrehozása

Választó lekérdezés létrehozása Választó lekérdezés létrehozása A választó lekérdezés egy vagy több rekordforrásból származó adatokat jelenít meg. A választó lekérdezések a táblák, illetve az adatbázis tartalmát nem változtatják meg,

Részletesebben

Közegek és felületek megadása

Közegek és felületek megadása 3. Előadás Közegek és felületek megadása A gyakorlatban nem közömbös, hogy az adott közeg milyen anyagi tulajdonságokkal bír. (Törésmutató, felület típusa, érdessége ) Lehetőség van az anyagok közegének,

Részletesebben

A program a köröket és köríveket az óramutató járásával ellentétes irányban rajzolja meg.

A program a köröket és köríveket az óramutató járásával ellentétes irányban rajzolja meg. 894 11.4. Kör és körív 11.4. Kör és körív A program a köröket és köríveket az óramutató járásával ellentétes irányban rajzolja meg. 11.4.1. Kör/Körív tulajdonságai A kör vagy körív létrehozása előtt állítsa

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

BME MOGI Gépészeti informatika 14.

BME MOGI Gépészeti informatika 14. BME MOGI Gépészeti informatika 14. 1. feladat Készítsen alkalmazást, mely a képernyő közepére egy véletlen színnel kitöltött kört rajzol! A színváltást nyomógomb segítségével oldja meg! A rajzolást a form

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

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

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"

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

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

Programozás II. 2. Dr. Iványi Péter Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c

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

A program telepítése

A program telepítése program telepítése Töltse le a telepítőt a www.kocheskochkft.hu internetes oldalról. Programjaink menü alatt válassza a Egyszerűsített foglalkoztatással kapcsolatos nyilvántartás programot, kattintson

Részletesebben

Programozás 7.o Az algoritmus fogalma (ismétlés)

Programozás 7.o Az algoritmus fogalma (ismétlés) Programozás 7.o Az algoritmus fogalma (étlés) Az algoritmus olyan leírás, felsorolás, amely az adott feladat megoldásához szükséges jól definiált utasítások s számú sorozata. Egy probléma megoldására kidolgozott

Részletesebben

1.1.1 Dátum és idő függvények

1.1.1 Dátum és idő függvények 1.1.1 Dátum és idő függvények Azt már tudjuk, hogy két dátum különbsége az eltelt napok számát adja meg, köszönhetően a dátum tárolási módjának az Excel-ben. Azt is tudjuk a korábbiakból, hogy a MA() függvény

Részletesebben

3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla

3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla 1. Az adatbázistábla létrehozása a, Ha még nem hoztunk létre egy adatbázistáblát sem, akkor a jobb egérrel a DDIC-objekt. könyvtárra kattintva, majd a Létrehozás és az Adatbázistábla menüpontokat választva

Részletesebben

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Függvények, csomagok Csomagok Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges számú osztályt tartalmazhat Pl.: java.util.scanner Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Célja:

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

Tömörítés, csomagolás, kicsomagolás. Letöltve: lenartpeter.uw.hu

Tömörítés, csomagolás, kicsomagolás. Letöltve: lenartpeter.uw.hu Tömörítés, csomagolás, kicsomagolás Letöltve: lenartpeter.uw.hu Tömörítők Tömörítők kialakulásának főbb okai: - kis tárkapacitás - hálózaton továbbítandó adatok mérete nagy Tömörítés: olyan folyamat, mely

Részletesebben

Word V. tabulátortípus meg nem jelenik: Tabulátor - balra, Tabulátor - jobbra,

Word V. tabulátortípus meg nem jelenik: Tabulátor - balra, Tabulátor - jobbra, Word V. Tabulátorok A tabulátorok (tabulátorhely: A vízszintes vonalzó azon pontja, amely meghatározza a szövegbehúzást, illetve a szövegoszlop kezdetét.), segítségével a szöveget balra, jobbra, középre,

Részletesebben

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

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés Készítette: Gregorics Tibor Előfeltétel: OAF (EAF2) Kötelező házi feladatok: 4 darab feladat max. 5-5 pontért Feltételek 2 hét késés: legfeljebb 3

Részletesebben

Baran Ágnes. Gyakorlat Függvények, Matlab alapok

Baran Ágnes. Gyakorlat Függvények, Matlab alapok Matematika Mérnököknek 1. Baran Ágnes Gyakorlat Függvények, Matlab alapok Matematika Mérnököknek 1. A gyakorlatok fóliái: https://arato.inf.unideb.hu/baran.agnes/oktatas.html Feladatsorok: https://arato.inf.unideb.hu/baran.agnes/oktatas.html

Részletesebben

QT Grafika az alap alkalmazás (GrafikaQtvel) működése

QT Grafika az alap alkalmazás (GrafikaQtvel) működése QT Grafika az alap alkalmazás (GrafikaQtvel) működése Állapot mentése és visszaállítása Intézzük el, hogy a program megjegyezze a beállításainkat, beleértve az ablak pozícióját és indításkor az utoljára

Részletesebben

KidPad 1.0. Felhasználói kézikönyv

KidPad 1.0. Felhasználói kézikönyv KidPad 1.0 Felhasználói kézikönyv Tartalomjegyzék 1. Bevezetés...2 2. Installálás...2 3. Felhasználói felület...3 Kilépés a programból...4 3.1. Egyéb eszköztár...5 3.2. Rajz eszköztár...6 3.3. Módosító

Részletesebben