11 Q_PROPERTY(int zoomFactor READ zoomFactor WRITE setZoomFactor)
12 public:
13 IconEditor(QWidget *parent = 0);
14 void setPenColor(const QColor &newColor);
15 QColor penColor const { return curColor; }
16 void setIconImage(const QImage &newImage);
17 QImage iconImage const { return image; }
18 QSize sizeHint const;
19 void setZoomFactor(int newZoom);
20 int zoomFactor const { return zoom; }
Класс
Когда мы используем виджет в
21 protected:
22 void mousePressEvent(QMouseEvent *event);
23 void mouseMoveEvent(QMouseEvent *event);
24 void paintEvent(QPaintEvent *event);
25 private:
26 void setImagePixel(const QPoint &pos, bool opaque);
27 QRect pixelRect(int i, int j) const;
28 QColor curColor;
29 QImage image;
30 int zoom;
31 };
32 #endif
Файл реализации класса начинается с конструктора
01 #include
02 #include "iconeditor.h"
03 IconEditor::IconEditor(QWidget *parent)
04 : QWidget(parent)
05 {
06 setAttribute(Qt::WA_StaticContents);
07 setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
08 curColor = Qt::black;
09 zoom = 8;
10 image = QImage(16, 16, QImage::Format_ARGB32);
11 image.fill(qRgba(0, 0, 0, 0));
12 }
В конструкторе имеется несколько тонких моментов, связанных с применением атрибута
Устанавливается черный цвет пера. Коэффициент масштабирования изображения (zoom factor) устанавливается на 8, то есть каждый пиксель пиктограммы представляется квадратом 8 × 8.
Данные пиктограммы хранятся в переменной—члене
Способ хранения изображения в классе
QRgb red = qRgba(255, 0, 0, 255);
или так (поскольку этот цвет непрозрачен):
QRgb red = qRgb(255, 0, 0);