Класс 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, 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 |
Связанные внешние члены
| 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().
Можно проверить, является ли область пустой или содержит ли она 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.
Авторские права 1987 года корпорации Digital Equipment Corporation, Мейнард, Массачусетс.
Все права защищены
Разрешение на использование, копирование, модификацию и распространение этого программного обеспечения и его документации для любых целей и безвозмездно предоставляется при условии, что вышеуказанное уведомление об авторских правах будет содержаться во всех копиях, а также указанное уведомление об авторских правах и это уведомление о разрешении должны содержаться в сопроводительной документации, и имя 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-координаты.
- Прямоугольники не должны пересекаться.
- Все прямоугольники с одинаковой верхней координатой должны иметь одинаковую высоту.
- Никакие два прямоугольника не должны соприкасаться по горизонтали (в этом случае они должны быть объединены в один более широкий прямоугольник).
- Прямоугольники должны быть отсортированы по возрастанию 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 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.
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/qt-5.12/qregion.html