Класс QPen
Класс QPen определяет, как QPainter должен рисовать линии и контуры фигур. Подробнее...
| Заголовок: | #include <QPen> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
Открытые функции
| QPen(QPen &&pen) | |
| QPen(const QPen &pen) | |
| QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin) | |
| QPen(const QColor &color) | |
| QPen(Qt::PenStyle style) | |
| QPen() | |
| QPen & | operator=(QPen &&other) |
| QPen & | operator=(const QPen &pen) |
| ~QPen() | |
| QBrush | brush() const |
| Qt::PenCapStyle | capStyle() const |
| QColor | color() const |
| qreal | dashOffset() const |
| QList<qreal> | dashPattern() const |
| bool | isCosmetic() const |
| bool | isSolid() const |
| Qt::PenJoinStyle | joinStyle() const |
| qreal | miterLimit() const |
| void | setBrush(const QBrush &brush) |
Связанные нечлены
Подробное описание
У пера есть стиль(), ширина(), кисть(), стиль_конца() и стиль_соединения().
Стиль пера определяет тип линии. Кисть используется для заливки штрихов, созданных пером. Используйте класс QBrush для указания стилей заливки. Стиль конца определяет концы линий, которые могут быть нарисованы с помощью QPainter, в то время как стиль соединения описывает, как рисуются соединения между двумя линиями. Ширину пера можно задать как целым числом (width()), так и с плавающей запятой (widthF()). Ширина линии равна нулю, указывает на декоративное перо. Это означает, что ширина пера всегда рисуется шириной в один пиксель, независимо от преобразования, заданного в рисовальщике.
Различные настройки легко можно изменить с помощью соответствующих функций setStyle(), setWidth(), setBrush(), setCapStyle() и setJoinStyle() (обратите внимание, что перо рисовальщика должно быть сброшено при изменении свойств пера).
Например:
QPainter painter(this); QPen pen(Qt::green, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin); painter.setPen(pen);
что эквивалентно
QPainter painter(this); QPen pen; // creates a default pen pen.setStyle(Qt::DashDotLine); pen.setWidth(3); pen.setBrush(Qt::green); pen.setCapStyle(Qt::RoundCap); pen.setJoinStyle(Qt::RoundJoin); painter.setPen(pen);
По умолчанию используется кисть тёмно-чёрного цвета с шириной 1, стилем обрезки углов Qt::SquareCap и стилем соединения Qt::BevelJoin.
Кроме того, QPen предоставляет удобные функции color() и setColor() для извлечения и установки цвета кисти пера соответственно. Перья также могут быть сравнимы и выведены в поток.
Для получения дополнительной информации о рисовании в целом, см. документацию Системы рисования.
Стиль пера
Qt предоставляет несколько встроенных стилей, представленных перечислением Qt::PenStyle:
| Qt::SolidLine | Qt::DashLine | Qt::DotLine |
| Qt::DashDotLine | Qt::DashDotDotLine | Qt::CustomDashLine |
Просто используйте функцию setStyle() для преобразования стиля пера в любой из встроенных стилей, за исключением стиля Qt::CustomDashLine, к которому мы вернёмся чуть позже. Установка стиля на Qt::NoPen указывает отрисовщику не рисовать линии или контуры. По умолчанию используется стиль пера Qt::SolidLine.
Начиная с Qt 4.1, также можно указать пользовательский шаблон пунктира, используя функцию setDashPattern(), которая неявно преобразует стиль пера в Qt::CustomDashLine. Аргумент pattern, являющийся QList, должен быть указан как чётное число элементов qreal, где элементы 1, 3, 5... - это тире, а 2, 4, 6... - это пробелы. Например, пользовательский шаблон, показанный выше, создаётся с помощью следующего кода:
QPen pen;
QList<qreal> dashes;
qreal space = 4;
dashes << 1 << space << 3 << space << 9 << space
<< 27 << space << 9 << space;
pen.setDashPattern(dashes); Обратите внимание, что шаблон пунктира задаётся в единицах ширины пера, например, тире длиной 5 при ширине 10 составляет 50 пикселей.
Текущую установленную схему штриховки можно получить, используя функцию dashPattern(). Используйте функцию isSolid(), чтобы определить, имеет ли ручка сплошную заливку или нет.
Стиль наконечника
Стиль наконечника определяет, как отображаются конечные точки линий с использованием QPainter. Стиль наконечника применяется только к линиям с шириной 1 или более. Перечисление Qt::PenCapStyle предоставляет следующие стили:
| Qt::SquareCap | Qt::FlatCap | Qt::RoundCap |
Стиль Qt::SquareCap представляет собой квадратный конец линии, который покрывает конечную точку и простирается за неё на половину ширины линии. Стиль Qt::FlatCap представляет собой квадратный конец линии, который не покрывает конечную точку линии. А стиль Qt::RoundCap представляет собой закруглённый конец линии, покрывающий конечную точку.
По умолчанию используется Qt::SquareCap.
Отображение или нет конечных точек, когда ширина пера равна 0 или 1, зависит от стиля наконечника. При использовании Qt::SquareCap или Qt::RoundCap они отображаются, при использовании Qt::FlatCap они не отображаются.
Стиль соединения
Стиль соединения определяет, как могут быть нарисованы соединения между двумя соединёнными линиями с использованием QPainter. Стиль соединения применяется только к линиям с шириной 1 или более. Перечисление Qt::PenJoinStyle предоставляет следующие стили:
| Qt::BevelJoin | Qt::MiterJoin | Qt::RoundJoin |
Стиль Qt::BevelJoin заполняет треугольную выемку между двумя линиями. Стиль Qt::MiterJoin продолжит линии, чтобы они сошлись под углом. А стиль Qt::RoundJoin заполняет дугу окружности между двумя линиями.
По умолчанию используется Qt::BevelJoin.
При применении стиля Qt::MiterJoin можно использовать функцию setMiterLimit(), чтобы указать, насколько далеко может простираться соединение митёр от точки соединения. miterLimit() используется для уменьшения артефактов между соединениями линий, где линии близки к параллельным.
miterLimit() должна быть указана в единицах ширины пера, например, предел митёра 5 при ширине 10 составляет 50 пикселей в длину. По умолчанию предел митёра равен 2, то есть в два раза больше ширины пера в пикселях.
|
Пример обработки контура пути Пример обработки контура пути демонстрирует встроенные схемы штриховки Qt и показывает, как пользовательские схемы могут быть использованы для расширения диапазона доступных схем. |
См. также QPainter, QBrush, Пример обработки контура пути и Пример Scribble.
Документация по функциям-членам
[since 5.4] QPen::QPen(QPen &&pen)
Создаёт перо, перемещённое из заданного pen.
Перенесённое перо может быть только присвоено, скопировано или уничтожено. Любая другая операция (до присвоения) приведёт к неопределённому поведению.
Эта функция была добавлена в Qt 5.4.
QPen::QPen(const QPen &pen)
Создаёт перо, являющееся копией заданного pen.
QPen::QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin)
Создаёт перо со заданной brush, width, стилем пера style, стилем наконечника cap и стилем соединения join.
См. также setBrush(), setWidth(), setStyle(), setCapStyle(), и setJoinStyle().
QPen::QPen(const QColor &color)
Создаёт перо для сплошной линии с шириной 1 и заданным color.
См. также setBrush() и setColor().
QPen::QPen(Qt::PenStyle style)
Создаёт чёрное перо с шириной 1 и заданным style.
См. также setStyle().
QPen::QPen()
Создаёт перо по умолчанию чёрного цвета, сплошной линией и шириной 1.
[since 5.2] QPen &QPen::operator=(QPen &&other)
Перемещающее присваивание other этому экземпляру QPen.
Эта функция была добавлена в Qt 5.2.
QPen &QPen::operator=(const QPen &pen)
Присваивает заданное pen этому перу и возвращает ссылку на это перо.
QPen::~QPen()
Уничтожает перо.
QBrush QPen::brush() const
Возвращает кисть, используемую для заполнения штрихов, созданных с помощью этого пера.
См. также setBrush().
Qt::PenCapStyle QPen::capStyle() const
Возвращает стиль наконечника пера.
См. также setCapStyle() и Стиль наконечника.
QColor QPen::color() const
Возвращает цвет кисти этого пера.
См. также brush() и setColor().
qreal QPen::dashOffset() const
Возвращает смещение штриховки пера.
См. также setDashOffset().
QList<qreal> QPen::dashPattern() const
Возвращает схему штриховки этого пера.
См. также setDashPattern(), style() и isSolid().
bool QPen::isCosmetic() const
Возвращает true , если перо косметическое; в противном случае возвращает false.
Косметические пера используются для рисования штрихов, которые имеют постоянную ширину независимо от каких-либо преобразований, применённых к QPainter, с которыми они используются. Рисование фигуры косметическим пером гарантирует, что её контур будет иметь одинаковую толщину при различных масштабах.
Перо нулевой ширины по умолчанию косметическое.
См. также setCosmetic() и widthF().
bool QPen::isSolid() const
Возвращает true , если перо имеет сплошную заливку, в противном случае возвращает false.
См. также style() и dashPattern().
Qt::PenJoinStyle QPen::joinStyle() const
Возвращает стиль соединения пера.
См. также setJoinStyle() и Стиль соединения.
qreal QPen::miterLimit() const
Возвращает предел митёра пера. Предел митёра имеет значение только в том случае, если стиль соединения установлен в Qt::MiterJoin.
См. также setMiterLimit() и Стиль соединения.
void QPen::setBrush(const QBrush &brush)
Устанавливает кисть, используемую для заполнения штрихов, созданных этим пером, на заданную brush.
См. также brush() и setColor().
void QPen::setCapStyle(Qt::PenCapStyle style)
Устанавливает стиль наконечника пера на заданный style. Значение по умолчанию — Qt::SquareCap.
См. также capStyle() и Стиль наконечника.
void QPen::setColor(const QColor &color)
Устанавливает цвет кисти этого пера на заданный color.
См. также setBrush() и color().
void QPen::setCosmetic(bool cosmetic)
Устанавливает это перо как косметическое или не косметическое, в зависимости от значения cosmetic.
См. также isCosmetic().
END_OF_DOCUMENT_MARKERvoid QPen::setDashOffset(qreal offset)
Устанавливает смещение пунктира (начальную точку шаблона пунктира) для этого пера до заданного offset. Смещение измеряется в единицах, используемых для задания шаблона пунктира.
| Например, шаблон, где каждый мазок имеет длину четыре единицы, за которым следует пробел в две единицы, начнется с мазка при рисовании линии. Однако, если смещение пунктира установлено на 4,0, любая нарисованная линия начнется с пробела. Значения смещения до 4,0 приведут к частичному отображению мазка, а значения смещения между 4,0 и 6,0 приведут к тому, что линия начнется с части пробела. |
Примечание: Это неявно преобразует стиль пера в Qt::CustomDashLine.
См. также dashOffset().
void QPen::setDashPattern(const QList<qreal> &pattern)
Устанавливает шаблон пунктира для этого пера в заданный pattern. Это неявно преобразует стиль пера в Qt::CustomDashLine.
Шаблон должен быть указан как четное число положительных элементов, где элементы 1, 3, 5... — это тире, а 2, 4, 6... — пробелы. Например:
QPen pen;
QList<qreal> dashes;
qreal space = 4;
dashes << 1 << space << 3 << space << 9 << space
<< 27 << space << 9 << space;
pen.setDashPattern(dashes); |
Шаблон пунктира задается в единицах ширины пера; например, тире длиной 5 при ширине 10 имеет длину 50 пикселей. Обратите внимание, что перо с нулевой шириной эквивалентно косметическому перу с шириной 1 пиксель.
Каждый тире также подчиняется стилям закругления, поэтому тире длиной 1 с квадратным закруглением будет выступать на 0,5 пикселя в каждом направлении, что приведет к общей ширине 2.
Обратите внимание, что по умолчанию стиль закругления — Qt::SquareCap, что означает, что квадратный конец линии покрывает конечную точку и выходит за нее на половину ширины линии.
См. также setStyle(), dashPattern(), setCapStyle() и setCosmetic().
void QPen::setJoinStyle(Qt::PenJoinStyle style)
Устанавливает стиль соединения пера до заданного style. Значение по умолчанию — Qt::BevelJoin.
См. также joinStyle() и Стиль соединения.
void QPen::setMiterLimit(qreal limit)
Устанавливает предел обрезания этого пера до заданного limit.
Предел обрезания описывает, насколько далеко может выступать соединение типа обрезка от точки соединения. Это используется для уменьшения артефактов между соединениями линий, где линии близки к параллельным.
Это значение влияет только при установке стиля пера на Qt::MiterJoin. Значение задается в единицах ширины пера, например, предел обрезания 5 при ширине 10 — это 50 пикселей. По умолчанию предел обрезания — 2, т. е. вдвое больше ширины пера в пикселях.
См. также miterLimit(), setJoinStyle() и Стиль соединения.
void QPen::setStyle(Qt::PenStyle style)
Устанавливает стиль пера в заданный style.
См. документацию Qt::PenStyle для списка доступных стилей. Начиная с Qt 4.1, также можно указать пользовательский шаблон пунктира с помощью функции setDashPattern(), которая неявно преобразует стиль пера в Qt::CustomDashLine.
Примечание: Эта функция сбрасывает смещение пунктира до нуля.
См. также style() и Стиль пера.
void QPen::setWidth(int width)
Устанавливает ширину пера в заданную width в пикселях с целочисленной точностью.
Ширина линии 0 указывает на косметическое перо. Это означает, что ширина пера всегда рисуется шириной в один пиксель, независимо от преобразования, заданного на рисовальщике.
Установка ширины пера с отрицательным значением не поддерживается.
См. также setWidthF() и width().
void QPen::setWidthF(qreal width)
Устанавливает ширину пера в заданную width в пикселях с плавающей точкой.
Ширина линии 0 указывает на косметическое перо. Это означает, что ширина пера всегда рисуется шириной в один пиксель, независимо от преобразования на рисовальщике.
Установка ширины пера с отрицательным значением не поддерживается.
См. также setWidth() и widthF().
Qt::PenStyle QPen::style() const
Возвращает стиль пера.
См. также setStyle() и Стиль пера.
void QPen::swap(QPen &other)
Меняет местами перо other и это перо. Эта операция очень быстрая и никогда не завершается ошибкой.
int QPen::width() const
Возвращает ширину пера с целочисленной точностью.
См. также setWidth() и widthF().
qreal QPen::widthF() const
Возвращает ширину пера с плавающей точкой.
См. также setWidthF() и width().
QVariant QPen::operator QVariant() const
Возвращает перо как QVariant.
bool QPen::operator!=(const QPen &pen) const
Возвращает true если перо отличается от заданного pen; в противном случае — false. Два пера различны, если у них разные стили, ширины или цвета.
См. также operator==().
bool QPen::operator==(const QPen &pen) const
Возвращает true если перо равно заданному pen; в противном случае — false. Два пера равны, если у них одинаковые стили, ширины и цвета.
См. также operator!=().
Связанные нечленные функции
QDataStream &operator<<(QDataStream &stream, const QPen &pen)
Записывает заданное pen в заданный stream и возвращает ссылку на stream.
См. также Сериализация типов данных Qt.
QDataStream &operator>>(QDataStream &stream, QPen &pen)
Читает перо из заданного stream в заданное pen и возвращает ссылку на stream.
См. также Сериализация типов данных Qt.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qpen.html