Класс QRegion
Класс QRegion задаёт область обрезки для художника. Подробнее...
| Заголовок: | #include <QRegion> |
| qmake: | QT += gui |
Общедоступные типы
| перечисление | RegionType { Прямоугольник, Эллипс } |
| тип | const_iterator |
| тип | const_reverse_iterator |
Общедоступные функции
| QRegion() | |
| QRegion(int x, int y, int w, int h, QRegion::RegionType t = Прямоугольник) | |
| QRegion(const QRect &r, QRegion::RegionType t = Прямоугольник) | |
| QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill) | |
| QRegion(const QRegion &r) | |
| QRegion(QRegion &&other) | |
| QRegion(const QBitmap &bm) | |
| QRegion::const_iterator | begin() const |
| QRect | boundingRect() const |
| QRegion::const_iterator | cbegin() const |
| QRegion::const_iterator | cend() const |
| bool | contains(const QPoint &p) const |
| bool | contains(const QRect &r) const |
| QRegion::const_reverse_iterator | crbegin() const |
| QRegion::const_reverse_iterator | crend() const |
| QRegion::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 |
| QRegion::const_reverse_iterator | rbegin() const |
| int | rectCount() const |
| QRegion::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 |
| QVariant | operator QVariant() const |
| bool | operator!=(const QRegion &other) const |
| const QRegion | operator&(const QRegion &r) const |
| const QRegion | operator&(const QRect &r) const |
| QRegion & | operator&=(const QRegion &r) |
| QRegion & | operator&=(const QRect &r) |
| const QRegion | operator+(const QRegion &r) const |
| const QRegion | operator+(const QRect &r) const |
| QRegion & | operator+=(const QRegion &r) |
| QRegion & | operator+=(const QRect &rect) |
| const 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 |
| const QRegion | operator^(const QRegion &r) const |
| QRegion & | operator^=(const QRegion &r) |
| const 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() или циклов с диапазонами C++11) даёт разложение области на прямоугольники.
Пример использования сложных областей:
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.
Документация по типам членов
перечисление QRegion::RegionType
Указывает форму создаваемой области.
| Константа | Значение | Описание |
|---|---|---|
QRegion::Rectangle |
0 |
область покрывает весь прямоугольник. |
QRegion::Ellipse |
1 |
область представляет собой эллипс внутри прямоугольника. |
тип QRegion::const_iterator
Итератор по неперекрывающимся прямоугольникам, составляющим область.
Объединение всех прямоугольников равно исходной области.
Класс QRegion не предоставляет изменяемые итераторы.
Этот typedef был введён в Qt 5.8.
тип QRegion::const_reverse_iterator
Обратный итератор по неперекрывающимся прямоугольникам, составляющим область.
Объединение всех прямоугольников равно исходной области.
Класс QRegion не предоставляет изменяемые итераторы.
Этот typedef был введён в Qt 5.8.
Документация по функциям-членам
QRegion::QRegion()
Создаёт пустую область.
См. также isEmpty().
QRegion::QRegion(int x, int y, int w, int h, QRegion::RegionType t = Rectangle)
Создаёт прямоугольную или эллиптическую область.
Если t равно Rectangle, область — это заполненный прямоугольник (x, y, w, h). Если t равно Ellipse, область — это заполненный эллипс с центром в (x + w / 2, y + h / 2) и размерами (w ,h).
QRegion::QRegion(const QRect &r, QRegion::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().
QRegion::const_iterator QRegion::begin() const
Возвращает const_iterator, указывающий на начало диапазона неперекрывающихся прямоугольников, составляющих область.
Объединение всех прямоугольников равно исходной области.
Эта функция была введена в Qt 5.8.
См. также rbegin(), cbegin() и end().
QRect QRegion::boundingRect() const
Возвращает прямоугольник, ограничивающий данную область. Для пустой области возвращается прямоугольник QRect::isNull().
QRegion::const_iterator QRegion::cbegin() const
То же, что и begin().
Эта функция была введена в Qt 5.8.
QRegion::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.
QRegion::const_reverse_iterator QRegion::crbegin() const
То же, что и rbegin().
Этот метод был добавлен в Qt 5.8.
QRegion::const_reverse_iterator QRegion::crend() const
То же, что и rend().
Этот метод был добавлен в Qt 5.8.
QRegion::const_iterator QRegion::end() const
Возвращает const_iterator, указывающий на элемент, следующий за последним неперекрывающимся прямоугольником, составляющим область.
Объединение всех прямоугольников равно исходной области.
Этот метод был добавлен в 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().
QRegion::const_reverse_iterator QRegion::rbegin() const
Возвращает const_reverse_iterator, указывающий на начало диапазона неперекрывающихся прямоугольников, составляющих область.
Объединение всех прямоугольников равно исходной области.
Этот метод был добавлен в Qt 5.8.
См. также begin(), crbegin() и rend().
int QRegion::rectCount() const
Возвращает количество прямоугольников, из которых состоит эта область. Эквивалентно end() - begin().
Этот метод был добавлен в Qt 4.6.
QRegion::const_reverse_iterator QRegion::rend() const
Возвращает const_reverse_iterator, указывающий на элемент, следующий за последним неперекрывающимся прямоугольником, составляющим область.
Объединение всех прямоугольников равно исходной области.
Этот метод был добавлен в Qt 5.8.
См. также end(), crend() и rbegin().
void QRegion::setRects(const QRect *rects, int number)
Устанавливает область, используя массив прямоугольников, указанный rects и number. Прямоугольники должны быть отсортированы по Y-координате (в порядке возрастания) и X-координате (также в порядке возрастания), а также удовлетворять следующим ограничениям:
- Прямоугольники не должны пересекаться.
- Все прямоугольники с заданной координатой top должны иметь одинаковую высоту.
- Два прямоугольника не должны соприкасаться по горизонтали (в этом случае они должны быть объединены в один более широкий прямоугольник).
- Прямоугольники должны быть отсортированы по возрастанию Y, а при равных 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().
QVariant QRegion::operator QVariant() const
Возвращает область как QVariant
bool QRegion::operator!=(const QRegion &other) const
Возвращает true если эта область отличается от области other; в противном случае возвращает false.
const QRegion QRegion::operator&(const QRegion &r) const
Применяет функцию intersected() к этой области и r. r1&r2 эквивалентно r1.intersected(r2).
См. также intersected().
const QRect 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.
const QRegion QRegion::operator+(const QRegion &r) const
Применяет функцию united() к этой области и r. r1+r2 эквивалентно r1.united(r2).
См. также united() и operator|().
const 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().
const 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.
const 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().
const 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/archives/qt-5.11/qregion.html