Класс QRegion
Класс QRegion задает область обрезки для художника. Подробнее...
| Заголовок: | #include <QRegion> |
| qmake: | QT += gui |
Публичные типы
| перечисление | RegionType { Rectangle, Ellipse } |
| typedef | const_iterator |
| typedef | const_reverse_iterator |
Открытые функции
| QRegion(const QBitmap &bm) | |
| QRegion(QRegion &&other) | |
| QRegion(const QRegion &r) | |
| QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill) | |
| QRegion(const QRect &r, QRegion::RegionType t = Rectangle) | |
| QRegion(int x, int y, int w, int h, QRegion::RegionType t = Rectangle) | |
| QRegion() | |
| QRegion & | operator=(QRegion &&other) |
| QRegion & | operator=(const QRegion &r) |
| 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) |
| 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 используется с QPainter::setClipRegion(), чтобы ограничить область рисования только необходимой частью. Также существует функция QWidget::repaint(), принимающая параметр QRegion. QRegion — лучший инструмент для минимизации области экрана, подлежащей обновлению при перерисовке.
Этот класс не подходит для создания фигур для рендеринга, особенно контуров. Используйте QPainterPath для создания путей и фигур для использования с QPainter.
QRegion — это неявное совместное использование.
Создание и использование областей
Область может быть создана из прямоугольника, эллипса, многоугольника или битовой карты. Сложные области могут быть созданы путём объединения простых областей с помощью методов united(), intersected(), subtracted() или xored() (исключающее ИЛИ). Вы можете сместить область с помощью метода translate().
Вы можете проверить, является ли область пустой или содержит ли она QPoint или QRect с помощью метода contains(). Граничный прямоугольник можно получить с помощью метода boundingRect().
Итерация по области (с помощью begin(), end() или циклов `for` 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 НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ИСКОВЫЕ ТРЕБОВАНИЯ, УЩЕРБ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, ВОЗНИКШИЕ В РЕЗУЛЬТАТЕ ДОГОВОРА, ДЕЛИКТА ИЛИ ИНАЧЕ, ВОЗНИКШИЕ ИЗ-ЗА, В СВЯЗИ С ИЛИ В СООТНОШЕНИИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
За исключением содержимого данного уведомления, имя Консорциума X не должно использоваться в рекламе или иным образом для продвижения продажи, использования или других сделок с данным Программным обеспечением без предварительного письменного разрешения от Консорциума X.
Авторские права 1987 года Корпорации Digital Equipment, Майнвард, Массачусетс.
Все права защищены
Разрешается использовать, копировать, модифицировать и распространять данное программное обеспечение и его документацию в любых целях и безвозмездно при условии, что в всех копиях будет присутствовать уведомление об авторских правах, а также что это уведомление об авторских правах и данное разрешение на использование будут присутствовать в сопроводительной документации, а также что имя 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(const QBitmap &bm)
Конструирует область из битовой карты bm.
Полученная область состоит из пикселей в битовой карте bm, которые имеют цвет Qt::color1, как если бы каждый пиксель был прямоугольником размером 1x1.
Этот конструктор может создавать сложные области, что замедлит отрисовку при их использовании. Обратите внимание, что отрисовку масскерных пиксельных карт можно значительно ускорить, используя QPixmap::setMask().
QRegion::QRegion(QRegion &&other)
Конструирует новую область, перемещая данные из области other. После вызова other становится пустой.
Эта функция была добавлена в Qt 5.7.
См. также isNull().
QRegion::QRegion(const QRegion &r)
Создаёт новую область, равную области r.
QRegion::QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill)
Создаёт область многоугольника из массива точек a с правилом заливки, заданным параметром fillRule.
Если fillRule равно Qt::WindingFill, область многоугольника определяется с использованием алгоритма обхода; если оно равно Qt::OddEvenFill, используется алгоритм заливки чётность-нечётность.
Предупреждение: Этот конструктор может создавать сложные области, что замедлит отрисовку при их использовании.
QRegion::QRegion(const QRect &r, QRegion::RegionType t = Rectangle)
Это перегруженная функция.
Создаёт область на основе прямоугольника r с типом области t.
Если прямоугольник некорректен, будет создана пустая область.
См. также QRegion::RegionType.
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()
Создаёт пустую область.
См. также isEmpty().
QRegion &QRegion::operator=(QRegion &&other)
Перемещает содержимое области other в текущую область.
Эта функция была добавлена в Qt 5.2.
QRegion &QRegion::operator=(const QRegion &r)
Присваивает область r текущей области и возвращает ссылку на неё.
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 (major) и X (minor) и соответствовать следующим ограничениям:
- Прямоугольники не должны пересекаться.
- Все прямоугольники с заданной координатой top должны иметь одинаковую высоту.
- Два прямоугольника не должны соприкасаться по горизонтали (в этом случае они должны быть объединены в один более широкий прямоугольник).
- Прямоугольники должны быть отсортированы в порядке возрастания 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().
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 &QRegion::operator<<(QDataStream &s, const QRegion &r)
Записывает область r в поток s и возвращает ссылку на поток.
См. также Формат операторов QDataStream.
QDataStream &QRegion::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.13/qregion.html