Класс QRegion
Класс QRegion определяет область обрезки для художника. Подробнее...
| Заголовок: | #include <QRegion> |
| qmake: | QT += gui |
Общедоступные типы
| перечисление | RegionType { Прямоугольник, Эллипс } |
| typedef | const_iterator |
| typedef | const_reverse_iterator |
Общедоступные функции
| QRegion() | |
| QRegion(int x, int y, int w, int h, RegionType t = Прямоугольник) | |
| QRegion(const QRect &r, RegionType t = Прямоугольник) | |
| QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill) | |
| QRegion(const QRegion &r) | |
| QRegion(QRegion &&other) | |
| QRegion(const QBitmap &bm) | |
| const_iterator | begin() const |
| QRect | boundingRect() const |
| const_iterator | cbegin() const |
| const_iterator | cend() const |
| bool | contains(const QPoint &p) const |
| bool | contains(const QRect &r) const |
| const_reverse_iterator | crbegin() const |
| const_reverse_iterator | crend() const |
| const_iterator | end() const |
| QRegion | intersected(const QRegion &r) const |
| QRegion | intersected(const QRect &rect) const |
| bool | intersects(const QRegion ®ion) const |
| bool | intersects(const QRect &rect) const |
| bool | isEmpty() const |
| bool | isNull() const |
| const_reverse_iterator | rbegin() const |
| int | rectCount() const |
| QVector<QRect> | rects() const |
| const_reverse_iterator | rend() const |
| void | setRects(const QRect *rects, int number) |
| QRegion | subtracted(const QRegion &r) const |
| void | swap(QRegion &other) |
| void | translate(int dx, int dy) |
| void | translate(const QPoint &point) |
| QRegion | translated(int dx, int dy) const |
| QRegion | translated(const QPoint &p) const |
| QRegion | united(const QRegion &r) const |
| QRegion | united(const QRect &rect) const |
| QRegion | xored(const QRegion &r) const |
| operator QVariant() const | |
| bool | operator!=(const QRegion &other) const |
| QRegion | operator&(const QRegion &r) const |
| QRegion | operator&(const QRect &r) const |
| QRegion & | operator&=(const QRegion &r) |
| QRegion & | operator&=(const QRect &r) |
| QRegion | operator+(const QRegion &r) const |
| QRegion | operator+(const QRect &r) const |
| QRegion & | operator+=(const QRegion &r) |
| QRegion & | operator+=(const QRect &rect) |
| QRegion | operator-(const QRegion &r) const |
| QRegion & | operator-=(const QRegion &r) |
| QRegion & | operator=(const QRegion &r) |
| QRegion & | operator=(QRegion &&other) |
| bool | operator==(const QRegion &r) const |
| QRegion | operator^(const QRegion &r) const |
| QRegion & | operator^=(const QRegion &r) |
| QRegion | operator|(const QRegion &r) const |
| QRegion & | operator|=(const QRegion &r) |
Связанные нечлены
| QDataStream & | operator<<(QDataStream &s, const QRegion &r) |
| QDataStream & | operator>>(QDataStream &s, QRegion &r) |
Подробное описание
Класс QRegion определяет область обрезки для рисования.
QRegion используется с QPainter::setClipRegion(), чтобы ограничить область рисования тем, что нужно нарисовать. Также существует функция QWidget::repaint(), принимающая параметр QRegion. QRegion — лучший инструмент для минимизации обновляемой области экрана при перерисовке.
Этот класс не подходит для создания фигур для рендеринга, особенно контуров. Используйте QPainterPath для создания путей и фигур для использования с QPainter.
QRegion — класс с неявным совместным использованием.
Создание и использование областей
Область можно создать из прямоугольника, эллипса, многоугольника или растрового изображения. Сложные области можно создать, объединяя простые области с помощью united(), intersected(), subtracted() или xored() (исключающее ИЛИ). Можно переместить область с помощью translate().
Можно проверить, пустая ли область с помощью isEmpty(), или содержит ли она точку QPoint или прямоугольник QRect. Границы прямоугольника можно найти с помощью boundingRect().
Итерация по области (с помощью begin(), end()) даёт разложение области на прямоугольники. Такая же последовательность прямоугольников возвращается методом rects().
Пример использования сложных областей:
void MyWidget::paintEvent(QPaintEvent *)
{
QRegion r1(QRect(100, 100, 200, 80), // r1: elliptic region
QRegion::Ellipse);
QRegion r2(QRect(100, 120, 90, 30)); // r2: rectangular region
QRegion r3 = r1.intersected(r2); // r3: intersection
QPainter painter(this);
painter.setClipRegion(r3);
... // paint clipped graphics
} Дополнительная информация о лицензиях
На платформах Embedded Linux и X11 части этого класса основаны на коде, полученном по следующим лицензиям:
Copyright (c) 1987 X Consortium
Разрешается бесплатное использование, копирование, модификация, слияние, публикация, распространение, предоставление под лицензией и/или продажа копий данного ПО и связанных с ним файлов документации (далее «ПО»), без ограничений, включая, но не ограничиваясь, правами на использование, копирование, модификацию, слияние, публикацию, распространение, предоставление подсублицензией и/или продажу копий ПО, и разрешается предоставить лицам, которым предоставлено ПО, делать то же самое, при соблюдении следующих условий:
Вышеуказанная информация об авторском праве и настоящее разрешение должны быть включены во все копии или существенные части ПО.
ПО ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ ГАРАНТИЙ ЛЮБОГО РОДА, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ КОММЕРЧЕСКОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И ОТСУТСТВИЕМ НАРУШЕНИЙ. НИ В КОЕМ СЛУЧАЕ X CONSORTIUM НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УЩЕРБ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, НЕЗАВИСИМО ОТ ВИДА ДЕЙСТВИЯ, ВОЗНИКШИЕ ИЗ, В СВЯЗИ С ИЛИ В СООТВЕТСТВИИ С ПО, ИЛИ ИЗ ИСПОЛЬЗОВАНИЯ ИЛИ ДРУГИМИ ДЕЙСТВИЯМИ С ПО.
За исключением содержащихся в этом уведомлении, название X Consortium не может использоваться в рекламе или иным образом для продвижения продажи, использования или других действий с данным ПО без предварительного письменного разрешения X Consortium.
Copyright 1987 Digital Equipment Corporation, Maynard, Massachusetts.
Все права защищены
Разрешается использование, копирование, модификация и распространение данного ПО и его документации для любых целей и без оплаты при условии, что вышеуказанная информация об авторском праве будет присутствовать во всех копиях и что данная информация об авторском праве и настоящее разрешение будут присутствовать в сопроводительных документах, а имя Digital не будет использоваться в рекламе или рекламе, относящихся к распространению ПО, без специального письменного предварительного разрешения.
DIGITAL НЕ ДАЁТ НИКАКИХ ГАРАНТИЙ ОТНОСИТЕЛЬНО ДАННОГО ПО, ВКЛЮЧАЯ ВСЕ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. В НИКАКОМ СЛУЧАЕ DIGITAL НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБОЙ СПЕЦИАЛЬНЫЙ, КОСВЕННЫЙ ИЛИ ПОСЛЕДОВАТЕЛЬНЫЙ УЩЕРБ, ИЛИ ЗА ЛЮБОЙ УЩЕРБ, ВОЗНИКШИЙ ИЗ ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ПРИБЫЛИ, НЕЗАВИСИМО ОТ ВИДА ДЕЙСТВИЯ, ВОЗНИКШИЕ ИЗ ИЛИ В СВЯЗИ С ИСПОЛЬЗОВАНИЕМ ИЛИ ВЫПОЛНЕНИЕМ ДАННОГО ПО.
См. также QPainter::setClipRegion(), QPainter::setClipRect(), и QPainterPath.
Документация по типам членов
enum QRegion::RegionType
Указывает форму создаваемой области.
| Константа | Значение | Описание |
|---|---|---|
QRegion::Rectangle |
0 |
область охватывает весь прямоугольник. |
QRegion::Ellipse |
1 |
область представляет собой эллипс внутри прямоугольника. |
typedef QRegion::const_iterator
Итератор по QRects, составляющим область.
Класс QRegion не предлагает изменяемые итераторы.
Этот typedef был введён в Qt 5.8.
typedef QRegion::const_reverse_iterator
Обратный итератор по QRects, составляющим область.
Класс QRegion не предлагает изменяемые итераторы.
Этот typedef был введён в Qt 5.8.
Документация по функциям-членам
QRegion::QRegion()
Создаёт пустую область.
См. также isEmpty().
QRegion::QRegion(int x, int y, int w, int h, RegionType t = Rectangle)
Создаёт прямоугольную или эллиптическую область.
Если t равно Rectangle, область — это заполненный прямоугольник (x, y, w, h). Если t равно Ellipse, область — это заполненный эллипс с центром в (x + w / 2, y + h / 2) и размером (w, h).
QRegion::QRegion(const QRect &r, RegionType t = Rectangle)
Это перегруженная функция.
Создаёт область на основе прямоугольника r с типом области t.
Если прямоугольник некорректен, будет создана пустая область.
См. также QRegion::RegionType.
QRegion::QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill)
Создаёт многоугольную область из массива точек a с правилом заполнения, заданным fillRule.
Если fillRule равно Qt::WindingFill, используется алгоритм заполнения по обходу; если Qt::OddEvenFill — алгоритм заполнения по нечётности.
Предупреждение: Этот конструктор может создавать сложные области, что замедляет рисование.
QRegion::QRegion(const QRegion &r)
Создаёт новую область, равную области r.
QRegion::QRegion(QRegion &&other)
Перемещающий конструктор новой области из области other. После вызова other становится пустой.
Эта функция была введена в Qt 5.7.
См. также isNull().
QRegion::QRegion(const QBitmap &bm)
Создаёт область из растрового изображения bm.
Полученная область состоит из пикселей в растровом изображении bm, которые имеют значение Qt::color1, как будто каждый пиксель — это прямоугольник 1x1.
Этот конструктор может создавать сложные области, что замедляет рисование. Обратите внимание, что рисование маск-изображений можно выполнить намного быстрее с помощью QPixmap::setMask().
const_iterator QRegion::begin() const
Возвращает const_iterator, указывающий на начало диапазона прямоугольников, составляющих эту область, в порядке, в котором их возвращает rects().
Эта функция была введена в Qt 5.8.
См. также rbegin(), cbegin(), и end().
QRect QRegion::boundingRect() const
Возвращает прямоугольник, ограничивающий данную область. Пустая область возвращает прямоугольник, для которого QRect::isNull() равно true.
const_iterator QRegion::cbegin() const
То же самое, что и begin().
Эта функция была введена в Qt 5.8.
const_iterator QRegion::cend() const
То же самое, что и end().
Эта функция была введена в Qt 5.8.
bool QRegion::contains(const QPoint &p) const
Возвращает true, если область содержит точку p; в противном случае возвращает false.
bool QRegion::contains(const QRect &r) const
Это перегруженная функция.
Возвращает true если область перекрывает прямоугольник r; в противном случае возвращает false.
const_reverse_iterator QRegion::crbegin() const
То же, что и rbegin().
Эта функция была добавлена в Qt 5.8.
const_reverse_iterator QRegion::crend() const
То же, что и rend().
Эта функция была добавлена в Qt 5.8.
const_iterator QRegion::end() const
Возвращает const_iterator, указывающий на позицию после конца диапазона прямоугольников, составляющих этот диапазон, в порядке, в котором их возвращает rects().
Эта функция была добавлена в Qt 5.8.
См. также rend(), cend() и begin().
QRegion QRegion::intersected(const QRegion &r) const
Возвращает область, являющуюся пересечением этой области и r.
На рисунке показано пересечение двух эллиптических областей.
Эта функция была добавлена в Qt 4.2.
См. также subtracted(), united() и xored().
QRegion QRegion::intersected(const QRect &rect) const
Возвращает область, являющуюся пересечением этой области и заданного прямоугольника rect.
Эта функция была добавлена в Qt 4.4.
См. также subtracted(), united() и xored().
bool QRegion::intersects(const QRegion ®ion) const
Возвращает true если эта область пересекается с region, в противном случае возвращает false.
Эта функция была добавлена в Qt 4.2.
bool QRegion::intersects(const QRect &rect) const
Возвращает true если эта область пересекается с rect, в противном случае возвращает false.
Эта функция была добавлена в Qt 4.2.
bool QRegion::isEmpty() const
Возвращает true если область пуста; в противном случае возвращает false. Пустая область — это область, не содержащая ни одной точки.
Пример:
QRegion r1(10, 10, 20, 20); r1.isEmpty(); // false QRegion r3; r3.isEmpty(); // true QRegion r2(40, 40, 20, 20); r3 = r1.intersected(r2); // r3: intersection of r1 and r2 r3.isEmpty(); // true r3 = r1.united(r2); // r3: union of r1 and r2 r3.isEmpty(); // false
bool QRegion::isNull() const
Возвращает true если область пуста; в противном случае возвращает false. Пустая область — это область, не содержащая ни одной точки. Эта функция эквивалентна isEmpty.
Эта функция была добавлена в Qt 5.0.
См. также isEmpty().
const_reverse_iterator QRegion::rbegin() const
Возвращает const_reverse_iterator, указывающий на начало диапазона прямоугольников, составляющих этот диапазон, в обратном порядке, в котором их возвращает rects().
Эта функция была добавлена в Qt 5.8.
См. также begin(), crbegin() и rend().
int QRegion::rectCount() const
Возвращает количество прямоугольников, которые будут возвращены в rects().
Эта функция была добавлена в Qt 4.6.
QVector<QRect> QRegion::rects() const
Возвращает массив непересекающихся прямоугольников, составляющих область.
Объединение всех прямоугольников равно исходной области.
См. также setRects().
const_reverse_iterator QRegion::rend() const
Возвращает const_reverse_iterator, указывающий на позицию после конца диапазона прямоугольников, составляющих этот диапазон, в обратном порядке, в котором их возвращает rects().
Эта функция была добавлена в Qt 5.8.
См. также end(), crend() и rbegin().
void QRegion::setRects(const QRect *rects, int number)
Устанавливает область с помощью массива прямоугольников, заданных rects и number. Прямоугольники должны быть отсортированы по возрастанию Y-X и должны удовлетворять следующим условиям:
- Прямоугольники не должны пересекаться.
- Все прямоугольники с одинаковой верхней координатой должны иметь одинаковую высоту.
- Два прямоугольника не должны соприкасаться по горизонтали (в этом случае они должны быть объединены в один более широкий прямоугольник).
- Прямоугольники должны быть отсортированы по возрастанию, при этом Y является основным ключом сортировки, а X — второстепенным.
См. также rects().
QRegion QRegion::subtracted(const QRegion &r) const
Возвращает область, полученную вычитанием r из этой области.
На рисунке показан результат вычитания эллипса справа из эллипса слева (left - right).
Эта функция была добавлена в Qt 4.2.
См. также intersected(), united() и xored().
void QRegion::swap(QRegion &other)
Меняет местами область other и эту область. Эта операция очень быстрая и никогда не терпит неудачу.
Эта функция была добавлена в Qt 4.8.
void QRegion::translate(int dx, int dy)
Перемещает область на dx по оси X и dy по оси Y.
void QRegion::translate(const QPoint &point)
Это перегруженная функция.
Перемещает область на point.x() по оси X и point.y() по оси Y, относительно текущего положения. Положительные значения смещают область вправо и вниз.
Переводит в заданную точку point.
QRegion QRegion::translated(int dx, int dy) const
Возвращает копию области, перемещённую на dx по оси X и dy по оси Y относительно текущего положения. Положительные значения перемещают область вправо и вниз.
Эта функция была добавлена в Qt 4.1.
См. также translate().
QRegion QRegion::translated(const QPoint &p) const
Это перегруженная функция.
Возвращает копию области, перемещённую на p.x() по оси X и p.y() по оси Y, относительно текущего положения. Положительные значения перемещают прямоугольник вправо и вниз.
Эта функция была добавлена в Qt 4.1.
См. также translate().
QRegion QRegion::united(const QRegion &r) const
Возвращает область, являющуюся объединением этой области и r.
На рисунке показано объединение двух эллиптических областей.
Эта функция была добавлена в Qt 4.2.
См. также intersected(), subtracted() и xored().
QRegion QRegion::united(const QRect &rect) const
Возвращает область, являющуюся объединением этой области и заданного прямоугольника rect.
Эта функция была добавлена в Qt 4.4.
См. также intersected(), subtracted() и xored().
QRegion QRegion::xored(const QRegion &r) const
Возвращает область, являющуюся операцией исключающего ИЛИ (XOR) этой области и r.
На рисунке показано исключающее ИЛИ двух эллиптических областей.
Эта функция была добавлена в Qt 4.2.
См. также intersected(), united() и subtracted().
QRegion::operator QVariant() const
Возвращает область как QVariant
bool QRegion::operator!=(const QRegion &other) const
Возвращает true если эта область отличается от области other; в противном случае возвращает false.
QRegion QRegion::operator&(const QRegion &r) const
Применяет функцию intersected() к этому региону и r. r1&r2 эквивалентно r1.intersected(r2).
См. также intersected().
QRegion QRegion::operator&(const QRect &r) const
Это перегруженная функция.
Эта функция была добавлена в Qt 4.4.
QRegion &QRegion::operator&=(const QRegion &r)
Применяет функцию intersected() к этому региону и r и присваивает результат этому региону. r1&=r2 эквивалентно r1 = r1.intersected(r2).
См. также intersected().
QRegion &QRegion::operator&=(const QRect &r)
Это перегруженная функция.
Эта функция была добавлена в Qt 4.4.
QRegion QRegion::operator+(const QRegion &r) const
Применяет функцию united() к этому региону и r. r1+r2 эквивалентно r1.united(r2).
См. также united() и operator|().
QRegion QRegion::operator+(const QRect &r) const
Это перегруженная функция.
Эта функция была добавлена в Qt 4.4.
QRegion &QRegion::operator+=(const QRegion &r)
Применяет функцию united() к этому региону и r и присваивает результат этому региону. r1+=r2 эквивалентно r1 = r1.united(r2).
См. также intersected().
QRegion &QRegion::operator+=(const QRect &rect)
Возвращает область, являющуюся объединением этого региона и указанного прямоугольника rect.
См. также united().
QRegion QRegion::operator-(const QRegion &r) const
Применяет функцию subtracted() к этому региону и r. r1-r2 эквивалентно r1.subtracted(r2).
См. также subtracted().
QRegion &QRegion::operator-=(const QRegion &r)
Применяет функцию subtracted() к этому региону и r и присваивает результат этому региону. r1-=r2 эквивалентно r1 = r1.subtracted(r2).
См. также subtracted().
QRegion &QRegion::operator=(const QRegion &r)
Присваивает r этому региону и возвращает ссылку на регион.
QRegion &QRegion::operator=(QRegion &&other)
Перемещающее присваивание other этому экземпляру QRegion.
Эта функция была добавлена в Qt 5.2.
bool QRegion::operator==(const QRegion &r) const
Возвращает true, если регион равен r; в противном случае возвращает false.
QRegion QRegion::operator^(const QRegion &r) const
Применяет функцию xored() к этому региону и r. r1^r2 эквивалентно r1.xored(r2).
См. также xored().
QRegion &QRegion::operator^=(const QRegion &r)
Применяет функцию xored() к этому региону и r и присваивает результат этому региону. r1^=r2 эквивалентно r1 = r1.xored(r2).
См. также xored().
QRegion QRegion::operator|(const QRegion &r) const
Применяет функцию united() к этому региону и r. r1|r2 эквивалентно r1.united(r2).
См. также united() и operator+().
QRegion &QRegion::operator|=(const QRegion &r)
Применяет функцию united() к этому региону и r и присваивает результат этому региону. r1|=r2 эквивалентно r1 = r1.united(r2).
См. также united().
Связанные нечленные функции
QDataStream &operator<<(QDataStream &s, const QRegion &r)
Записывает регион r в поток s и возвращает ссылку на поток.
См. также Формат операторов QDataStream.
QDataStream &operator>>(QDataStream &s, QRegion &r)
Читает регион из потока s в r и возвращает ссылку на поток.
См. также Формат операторов QDataStream.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qregion.html