Заливка фигур цветом и настройки отрисовки

Последнее обновление: 14.01.2024

Заливка фигур

Для заливки цветом нарисованных фигур 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();
}

окрашивание цветом прямоугольника в Qt и C++

Для заливки цветом пути в метод 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();
}

fillPath и окрашивание QPainterPath в Qt и C++ ==========================

Установка цвета

По умолчанию при рисовании 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 и C++

Третья версия метода устанавливает стиль линий с помощью перечисления Qt::PenStyle, которое может принимть следующие значения:

  • Qt::NoPen: вообще нет линии.

  • Qt::SolidLine: простая линия

  • Qt::DashLine: тире, разделенные несколькими пикселями.

  • Qt::DotLine: точки, разделенные несколькими пикселями.

  • Qt::DashDotLine: чередование точек и тире.

  • Qt::DashDotDotLine: одно тире, две точки, одно тире, две точки.

  • Qt::CustomDashLine: пользовательский шаблон, определенный с помощью QPainterPathStroker::setDashPattern().

Типы линий в Qt и C++

Например, установим линию из точек:

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();
    }
};
Настройка стиля линий для рисования с QPainter в Qt и C++
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850