Для заливки цветом нарисованных фигур QPainter предоставляет два метода:
fillRect(): заливает цветом прямоугольную область
fillPath(): заливает цветом геометрический путь
Для заливки цветом прямоугольника метод fillRect() принимает различный набор параметров, но прежде всего это параметры, которые образуют прямоугольную область, и объект QBrush, который устанавливает цвет. Возьмем простейшую версию:
fillRect(int x, int y, int width, int height, const QBrush &brush)
Первый четыре параметра представляют соответственно x- и y-координаты верхнего левого угла прямоугольника и его ширину и высоту. А последний параметр задает настройки цвета. Например:
#include <QApplication> #include <QWidget> #include <QPainter> class MyWidget : public QWidget { void paintEvent(QPaintEvent *event) { QPainter painter(this); painter.fillRect(20, 10, 210, 130, QBrush{"#2980b9"}); } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.setFixedSize(250, 150); widget.setWindowTitle("METANIT.COM"); widget.show(); return app.exec(); }
Для заливки цветом пути в метод fillPath() передается путь QPainterPath и настройки цвета в виде QBrush:
fillPath(const QPainterPath &path, const QBrush &brush)
Например, окрасим путь, который образует треугольник:
#include <QApplication> #include <QWidget> #include <QPainter> #include <QPainterPath> class MyWidget : public QWidget { void paintEvent(QPaintEvent *event) { QPainterPath path; // создаем путь path.moveTo(115, 10); path.lineTo(230, 140); path.lineTo(10, 140); path.closeSubpath(); QPainter painter(this); painter.fillPath(path, QBrush{"#2980b9"}); // окрашиваем путь } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.setFixedSize(250, 150); widget.setWindowTitle("METANIT.COM"); widget.show(); return app.exec(); }==========================
По умолчанию при рисовании QPainter применяет ряд стандартных настроек. Например, для отрисовки контура фигур применяется черный цвет. Однако цвет контура можно изменить. Для этого QPainter предоставляет метод setPen()
void setPen(const QPen &pen) void setPen(const QColor &color) void setPen(Qt::PenStyle style)
За все настройки рисования контура фигур отвечает объекта класса QPen, который передается в первую версию метода.
Вторая версия метода позволяет только установить цвет с помощью объекта QColor
Третья версия устанавливает стиль линии контура с помощью перечисления Qt::PenStyle
.
Если нам надо только настроить цвет, то мы можем взять вторую версию метода. Например, используем красный цвет для линий:
#include <QApplication> #include <QWidget> #include <QPainter> class MyWidget : public QWidget { void paintEvent(QPaintEvent *event) { QPainter painter; painter.begin(this); painter.setPen("red"); painter.drawLine(115, 10, 230, 140); painter.drawLine(230, 140, 10, 140); painter.drawLine(10, 140, 115, 10); painter.end(); } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.setFixedSize(250, 150); widget.setWindowTitle("METANIT.COM"); widget.show(); return app.exec(); }
Третья версия метода устанавливает стиль линий с помощью перечисления Qt::PenStyle, которое может принимть следующие значения:
Qt::NoPen
: вообще нет линии.
Qt::SolidLine
: простая линия
Qt::DashLine
: тире, разделенные несколькими пикселями.
Qt::DotLine
: точки, разделенные несколькими пикселями.
Qt::DashDotLine
: чередование точек и тире.
Qt::DashDotDotLine
: одно тире, две точки, одно тире, две точки.
Qt::CustomDashLine
: пользовательский шаблон, определенный с помощью QPainterPathStroker::setDashPattern()
.
Например, установим линию из точек:
class MyWidget : public QWidget { void paintEvent(QPaintEvent *event) { QPainter painter; painter.begin(this); painter.setPen(Qt::DotLine); painter.drawLine(115, 10, 230, 140); painter.drawLine(230, 140, 10, 140); painter.drawLine(10, 140, 115, 10); painter.end(); } };
Однако, если необходимо установить множество различных настроек линий фигур, то в этом случае применяется первая версия метода setPen()
, в которую передается объект типа
QPen. Этот класс определяет ряд методов для настройки отрисовки. Отмечу освновные:
setColor(const QColor &color)
: устанавливает цвет линий
setStyle(Qt::PenStyle style)
: устанавливает стиль линий
setWidth(int width)
: устанавливает ширину линий
setWidthF(qreal width)
: устанавливает ширину линий
Применение:
class MyWidget : public QWidget { void paintEvent(QPaintEvent *event) { QPen pen; pen.setStyle(Qt::DotLine); pen.setWidth(3); pen.setColor("navy"); QPainter painter; painter.begin(this); painter.setPen(pen); painter.drawLine(115, 10, 230, 140); painter.drawLine(230, 140, 10, 140); painter.drawLine(10, 140, 115, 10); painter.end(); } };