https://github.com/naghim/fft-lab08
https://github.com/naghim/fft-lab08
Last synced: 11 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/naghim/fft-lab08
- Owner: naghim
- Created: 2023-03-17T08:21:38.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-03-19T16:20:52.000Z (almost 2 years ago)
- Last Synced: 2025-01-08T02:53:05.488Z (about 1 year ago)
- Language: C++
- Size: 6.84 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Labor 08
## Rajzolás QT-ben
A [`QPainter`](https://doc.qt.io/qt-6/qpainter.html) erősen optimalizált funkciókat biztosít a legtöbb grafikus részlet megalkotásához. Mindent meg tud rajzolni az egyszerű grafikus primitívektől (amelyeket a [`QPoint`](https://doc.qt.io/qt-6/qpoint.html), [`QLine`](https://doc.qt.io/qt-6/qline.html), [`QRect`](https://doc.qt.io/qt-6/qrect.html), [`QRegion`](https://doc.qt.io/qt-6/qregion.html) és [`QPolygon`](https://doc.qt.io/qt-6/qpolygon.html) osztályok képviselnek) a bonyolult alakzatokig, például a vektor útvonalakig ([`QPainterPath`](https://doc.qt.io/qt-6/qpainterpath.html) osztály - lehetővé teszi a grafikus alakzatok elkészítését és újrafelhasználását).
A vonalakat és körvonalakat a [`QPen`](https://doc.qt.io/qt-6/qpen.html) osztály segítségével rajzoljuk meg. A tollat stílusa (azaz vonaltípusa, _line_), szélessége (_width_), ecsetje/feje (_brush_), a végpontok rajzolása (_cap_) és két vonal közötti összekapcsolódás (_joint_) határozza meg. A toll ecsetje egy [`QBrush`](https://doc.qt.io/qt-6/qbrush.html) objektum, amelyet a tollal generált vonások kitöltésére használnak, vagyis a [`QBrush`](https://doc.qt.io/qt-6/qbrush.html) osztály határozza meg a kitöltési mintát.
A [`QPainter`](https://doc.qt.io/qt-6/qpainter.html)-rel szöveget is rajzolhatunk ki. Szöveg rajzolásakor a betűtípust a [`QFont`](https://doc.qt.io/qt-6/qfont.html) osztály segítségével adjuk meg. A ténylegesen használt betűtípus attribútumait a [`QFontInfo`](https://doc.qt.io/qt-6/qfontinfo.html) osztály segítségével lehet lekérni. Ezenkívül a [`QFontMetrics`](https://doc.qt.io/qt-6/qfontmetrics.html) osztály biztosítja a betűméretet.
Normális esetben a [`QPainter`](https://doc.qt.io/qt-6/qpainter.html) "természetes" koordinátarendszerbe rajzol, de képes transzformációkat végrehajtani [`QTransform`](https://doc.qt.io/qt-6/qtransform.html) osztály használatával.
A színeket a [`QColor`](https://doc.qt.io/qt-6/qcolor.html) osztály képviseli, amely támogatja az RGB, HSV és CMYK színmodelleket. Támogatja az alfa-kevert körvonalazást és kitöltést is (áttetszőség elérése érdekében).
Az elérhető kitöltési mintákat a [`Qt::BrushStyle`](https://doc.qt.io/qt-6/qt.html#BrushStyle-enum) enum írja le. Ide tartoznak az egyenletes színtől a nagyon ritka mintázatig terjedő alapminták, különféle vonalkombinációk, színátmenet kitöltések és textúrák. A Qt biztosítja a [`QGradient`](https://doc.qt.io/qt-6/qgradient.html) osztályt az egyéni színátmenet kitöltések meghatározásához, míg a textúramintákat a [`QPixmap`](https://doc.qt.io/qt-6/qpixmap.html) osztály segítségével határozzuk meg.
## Feladatok
1. [`QPainter`](https://doc.qt.io/qt-6/qpainter.html) és [`QPen`](https://doc.qt.io/qt-6/qpen.html) segítségével, egy ablakra:
a. rajzoljuk ki az olimpiai játékok logóját:
b. rajzoljunk egy házat:
A pontok megtalálásához használhatjuk a repositoryban található **CursorTracker** projektet, amely futtatásakor az egerünk jelenlegi relatív pozícióját írja ki az alkalmazás ablakához viszonyítva. Bővebb információk, implementálási kérdések megtalálhatóak a projekt forráskódjában.
2. Implementáljunk:
a. egy digitális órát:
b. egy analóg órát:
3. Készítsünk egy mini Paint/Scribble alkalmazást, amelyben szabadon rajzolhatunk. Az alkalmazás adjon esélyt képeket betöltésére, a ceruzánk/ecsetünk méretének és színének megváltoztatására, vászonunk törlésére, majd pedig az elkészült képet lehessen elmenteni különböző formátumokba, illetve kinyomtatni. Ezen opciókat helyezzük menürendszerbe.
Egy lehetséges megoldás megtalálható [itt](https://doc.qt.io/qt-6/qtwidgets-widgets-scribble-example.html).