32 void IconEditor::setZoomFactor(int newZoom)
33 {
34 if (newZoom < 1)
35 newZoom = 1;
36 if (newZoom != zoom) {
37 zoom = newZoom;
38 update();
39 updateGeometry();
40 }
41 }
Π€ΡΠ½ΠΊΡΠΈΡ setZoomFactor() ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΌΠ°ΡΡΡΠ°Π±Π½ΡΠΉ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π° Π½ΡΠ»Ρ ΠΌΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΡΠ΅ΠΌ Π²ΡΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΌΠ΅Π½ΡΡΠ΅Π΅, ΡΠ΅ΠΌ 1. ΠΡ ΠΎΠΏΡΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ update() ΠΈ updateGeometry() Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°.
Π€ΡΠ½ΠΊΡΠΈΠΈ penColor(), iconImage() ΠΈ zoomFactor() ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΊΠ°ΠΊ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ paintEvent(). ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ³ΡΠ°Π΅Ρ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΡΡ ΡΠΎΠ»Ρ Π² ΠΊΠ»Π°ΡΡΠ΅ IconEditor. ΠΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΅Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² QWidget Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ, ΠΎΡΡΠ°Π²Π»ΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΏΡΡΡΡΠΌ.
Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½Π°Ρ Π½Π°ΠΌΠΈ Π² Π³Π»Π°Π²Π΅ 3 ΡΡΠ½ΠΊΡΠΈΡ closeEvent(), ΡΡΠ½ΠΊΡΠΈΡ paintEvent() ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΡ. Π Qt ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΡΠΈΠΏΡ ΡΠΎΠ±ΡΡΠΈΡ. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π³Π»Π°Π²Π΅ 7.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΡΠ°ΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (paint) ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ paintEvent():
β’ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ²ΠΎΠ΄Π΅ Π½Π° ΡΠΊΡΠ°Π½ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ Π²ΠΈΠ΄ΠΆΠ΅Ρ Π½Π°ΡΠΈΡΠΎΠ²Π°Π» ΡΠ°ΠΌ ΡΠ΅Π±Ρ;
β’ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ;
β’ Π΅ΡΠ»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ ΠΈ Π·Π°ΡΠ΅ΠΌ Π²Π½ΠΎΠ²Ρ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΠΌ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΊΡΡΠ²Π°Π»ΠΈΡΡ (Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠΊΠ½Π°ΠΌΠΈ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡ Π·Π°ΠΊΡΡΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ).
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ QWidget::update() ΠΈΠ»ΠΈ QWidget::repaint(). Π Π°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: repaint() ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ΅, Π° ΡΡΠ½ΠΊΡΠΈΡ update() ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ Qt. (ΠΠ±Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π±ΡΠ΄ΡΡ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡΠ°Π½Π΅.) ΠΡΠ»ΠΈ update() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, Qt ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄ΡΡΠ³ Π·Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π΅Π»Π°Π΅Ρ ΠΎΠ΄Π½ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠ°Π½ΠΈΡ. Π ΠΊΠ»Π°ΡΡΠ΅ IconEditor ΠΌΡ Π²ΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ update().
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄:
42 void IconEditor::paintEvent(QPaintEvent *event)
43 {
44 QPainter painter(this);
45 if (zoom >= 3) {
46 painter.setPen(palette().foreground().color());
47 for (int i = 0; i <= image.width(); ++i)
48 painter.drawLine(zoom * i, 0,
49 zoom * i, zoom * image.height());
50 for (int j = 0; j <= image.height(); ++j)
51 painter.drawLine(0, zoom * j,
52 zoom * image.width(), zoom * j);
53 }
54 for (int i = 0; i < image.width(); ++i) {
55 for (int j = 0; j < image.height(); ++j) {
56 QRect rect = pixelRect(i, j);
57 if (!event->region().intersect(rect).isEmpty()) {
58 QColor color = QColor::fromRgba(image.pixel(i, j));
59 painter.fillRect(rect, color);
60 }
61 }
62 }
63 }
ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° QPainter Π½Π°ΡΠ΅Π³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. ΠΡΠ»ΠΈ ΠΌΠ°ΡΡΡΠ°Π±Π½ΡΠΉ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΡΠ°Π²Π΅Π½ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ 3, ΠΌΡ Π²ΡΡΠ΅ΡΡΠΈΠ²Π°Π΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ QPainter::drawLine() Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ Π»ΠΈΠ½ΠΈΠΈ ΡΠ΅ΡΠΊΠΈ.
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ QPainter::drawLine() ΠΈΠΌΠ΅Π΅ΡΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ:
painter.drawLine(x1, y1, x2, y2);
Π³Π΄Π΅ (x1, y1) Π·Π°Π΄Π°Π΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ° Π»ΠΈΠ½ΠΈΠΈ ΠΈ (x2, y2) Π·Π°Π΄Π°Π΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ° Π»ΠΈΠ½ΠΈΠΈ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠΏΠ° QPoint Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅ΡΡΡΠ΅Ρ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π».
ΠΠΈΠΊΡΠ΅Π»Ρ Π² Π²Π΅ΡΡ Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡΠ³Π»Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Qt ΠΈΠΌΠ΅Π΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ (0, 0), Π° ΠΏΠΈΠΊΡΠ΅Π»Ρ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΠΏΡΠ°Π²ΠΎΠΌ ΡΠ³Π»Ρ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ (width() β 1, height() β 1). ΠΡΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΎΠ±ΡΡΠ½ΡΡ Π΄Π΅ΠΊΠ°ΡΡΠΎΠ²ΡΠΊΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠ½ΡΡΡΡ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ Π² QPainter, ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΡ Π΅Π΅ ΡΠ°ΠΊΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΠΊΠ°ΠΊ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ Π²ΠΎΠΏΡΠΎΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π² Π³Π»Π°Π²Π΅ 8 (Β«ΠΡΠ°ΡΠΈΠΊΠ° 2D ΠΈ 3DΒ»).
Π ΠΈΡ. 5.3. ΠΡΡΠ΅ΡΡΠΈΠ²Π°Π½ΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ QPainter.
ΠΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π² QPainter ΡΡΠ½ΠΊΡΠΈΠΈ drawLine() ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ²Π΅Ρ Π»ΠΈΠ½ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ setPen(). ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²Π΅Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ½ΡΠΉ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠΉ), Π½ΠΎ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°Π»ΠΈΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°.
ΠΠ°ΠΆΠ΄ΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ°Π»ΠΈΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΡΠ²Π΅Ρ ΡΠΎΠ½Π° Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² (ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ²Π΅ΡΠ»ΠΎβΡΠ΅ΡΡΠΉ) ΠΈ ΡΠ²Π΅Ρ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΡΠΎΠΌ ΡΠΎΠ½Π΅ (ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ΅ΡΠ½ΡΠΉ). ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠ°Π»ΠΈΡΡΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄ ΡΡ Π΅ΠΌΡ ΡΠ²Π΅ΡΠΎΠ² ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ²Π΅ΡΠ° ΠΈΠ· ΠΏΠ°Π»ΠΈΡΡΡ, ΠΌΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠΌ Π² IconEditor ΡΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ.
ΠΠ°Π»ΠΈΡΡΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΠ²Π΅ΡΠΎΠ²ΡΡ Π³ΡΡΠΏΠΏ: Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ, Π½Π΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΈ Π½Π΅ΡΠ°Π±ΠΎΡΠ΅ΠΉ. Π¦Π²Π΅ΡΠΎΠ²Π°Ρ Π³ΡΡΠΏΠΏΠ° Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°:
β’ Π³ΡΡΠΏΠΏΠ° Active ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°;
β’ Π³ΡΡΠΏΠΏΠ° Inactive ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΎΠΊΠΎΠ½;
β’ Π³ΡΡΠΏΠΏΠ° Disabled ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.
Π€ΡΠ½ΠΊΡΠΈΡ QWidget::palette() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠ°Π»ΠΈΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° QPalette. Π¦Π²Π΅ΡΠΎΠ²ΡΠ΅ Π³ΡΡΠΏΠΏΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ° QPalette::QColorGroup. Π£Π΄ΠΎΠ±Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ QWidget::colorGroup() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΠ²Π΅ΡΠΎΠ²ΡΡ Π³ΡΡΠΏΠΏΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ ΡΠ΅Π΄ΠΊΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠ²Π΅Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· ΠΏΠ°Π»ΠΈΡΡΡ.
ΠΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΊΠΈΡΡΡ ΠΈΠ»ΠΈ ΡΠ²Π΅Ρ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ²ΡΠ·Π°Π½ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠ°Π»ΠΈΡΡΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ QWidget::palette(), ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠΎΠ»Π΅Π²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ QPalette::foreground(). ΠΠ°ΠΆΠ΄Π°Ρ ΡΠΎΠ»Π΅Π²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΈΡΡΡ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ²Π΅Ρ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΠΊΠΈΡΡΠΈ, ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΈ Π² paintEvent(). ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ ΠΊΠΈΡΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ²Π΅ΡΠΎΠ²ΡΡ Π³ΡΡΠΏΠΏΡ.
Π€ΡΠ½ΠΊΡΠΈΡ paintEvent() Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠ·ΠΎΠ² IconEditor::pixelRect() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ QRect, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡ Π½Π΅ Π²ΡΠ΄Π°Π΅ΠΌ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΠΏΡΠΎΡΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ.
Π ΠΈΡ. 5.4. ΠΡΡΠ΅ΡΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ QPainter.
ΠΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ QPainter::fillRect() Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π½Π° ΡΠΊΡΠ°Π½ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ. QPainter::fillRect() ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ QRect ΠΈ QBrush. ΠΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ QColor Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΈΡΡΠΈ, ΠΌΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΠΌ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ.
64 QRect IconEditor::pixelRect(int i, int j) const
65 {
66 if (zoom >= 3) {
67 return QRect(zoom * i + 1, zoom * j + 1, zoom - 1, zoom - 1);
68 } else {
69 return QRect(zoom * i, zoom * j, zoom, zoom);
70 }
71 }
Π€ΡΠ½ΠΊΡΠΈΡ pixelRect() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ QRect, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ QPainter::fillRect(). ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ i ΠΈ j ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π² QImage, Π° Π½Π΅ Π² Π²ΠΈΠ΄ΠΆΠ΅ΡΠ΅. ΠΡΠ»ΠΈ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π²Π΅Π½ 1, ΠΎΠ±Π΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ QRect ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ QRect(x, Ρ, width, height), Π³Π΄Π΅ (x, Ρ) ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, a width ΠΈ height ΡΠ²Π»ΡΡΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° (ΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΈ Π²ΡΡΠΎΡΠΎΠΉ). ΠΡΠ»ΠΈ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π²Π΅Π½ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 3, ΠΌΡ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ ΠΈ ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ, ΡΡΠΎΠ±Ρ Π½Π΅ Π·Π°Π³ΠΎΡΠ°ΠΆΠΈΠ²Π°ΡΡ Π»ΠΈΠ½ΠΈΠΈ ΡΠ΅ΡΠΊΠΈ.
72 void IconEditor::mousePressEvent(QMouseEvent *event)
73 {
74 if (event->button() == Qt::LeftButton) {
75 setImagePixel(event->pos(), true);
76 } else if (event->button() == Qt::RightButton) {
77 setImagePixel(event->pos(), false);
78 }
79 }
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΊΠΈ, ΡΠΈΡΡΠ΅ΠΌΠ° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ Β«ΠΊΠ»Π°Π²ΠΈΡΠ° ΠΌΡΡΠΊΠΈ Π½Π°ΠΆΠ°ΡΠ°Β» (mouse press). ΠΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ QWidget::mousePressEvent() ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΡΠ΅ΡΠ΅ΡΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ ΠΏΠΎΠ΄ ΠΊΡΡΡΠΎΡΠΎΠΌ ΠΌΡΡΠΊΠΈ.
ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠ°Π» Π»Π΅Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΊΠΈ, ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π·Π°ΠΊΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ setImagePixel() c true Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΡΠΊΠ°Π·ΡΠ²Π°Ρ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ²Π΅ΡΠ° ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ²Π΅Ρ ΠΏΠ΅ΡΠ°. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠ°Π» ΠΏΡΠ°Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΊΠΈ, ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ setImagePixel(), Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ false Π΄Π»Ρ ΡΡΠΈΡΠ°Π½ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ.