Класс QRegion
Класс QRegion задаёт область обрезки для рисовальщика. Подробнее...
| Заголовок: | #include <QRegion> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
Открытые типы
| Перечисление | ТипОбласти { Прямоугольник, Эллипс } |
| КонстантныйИтератор | |
| КонстантныйОбратныйИтератор |
Открытые функции
| 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) |
| HRGN | toHRGN() const |
| 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 |
| 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) |
| 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) |
Статические публичные члены
| QRegion | fromHRGN(HRGN hrgn) |
Связанные нечлены
| 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. Граница области может быть найдена с помощью 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
}См. также QPainter::setClipRegion, QPainter::setClipRect и QPainterPath.
Документация по типам членов
enum QRegion::RegionType
Указывает форму области, которая должна быть создана.
| Константа | Значение | Описание |
|---|---|---|
QRegion::Rectangle |
0 |
область покрывает весь прямоугольник. |
QRegion::Ellipse |
1 |
область представляет собой эллипс внутри прямоугольника. |
[since 5.8] QRegion::const_iterator
Итератор по непересекающимся прямоугольникам, составляющим область.
Объединение всех прямоугольников равно исходной области.
QRegion не предлагает изменяемые итераторы.
Этот typedef был введён в Qt 5.8.
[since 5.8] QRegion::const_reverse_iterator
Обратный итератор по непересекающимся прямоугольникам, составляющим область.
Объединение всех прямоугольников равно исходной области.
QRegion не предлагает изменяемые итераторы.
Этот typedef был введён в Qt 5.8.
Документация по функциям-членам
QRegion::QRegion(const QBitmap &bm)
Создаёт область из битовой карты bm.
Полученная область состоит из пикселей в битовой карте bm, которые имеют значение Qt::color1, как если бы каждый пиксель был прямоугольником размером 1x1.
Этот конструктор может создавать сложные области, что замедлит отрисовку при использовании. Обратите внимание, что отрисовка маск-пикселей может быть значительно ускорена с помощью QPixmap::setMask().
[since 5.7] 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().
[since 5.2] QRegion &QRegion::operator=(QRegion &&other)
Перемещающее присваивание other этому экземпляру QRegion.
Эта функция была введена в Qt 5.2.
QRegion &QRegion::operator=(const QRegion &r)
Присваивает r этой области и возвращает ссылку на область.
[since 5.8] QRegion::const_iterator QRegion::begin() const
Возвращает const_iterator, указывающий на начало диапазона непересекающихся прямоугольников, составляющих область.
Объединение всех прямоугольников равно исходной области.
Эта функция была введена в Qt 5.8.
См. также rbegin(), cbegin() и end().
QRect QRegion::boundingRect() const
Возвращает прямоугольник, ограничивающий эту область. Пустая область возвращает прямоугольник, являющийся QRect::isNull().
[since 5.8] QRegion::const_iterator QRegion::cbegin() const
То же самое, что и begin().
Эта функция была введена в Qt 5.8.
[since 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.
[since 5.8] QRegion::const_reverse_iterator QRegion::crbegin() const
То же самое, что и rbegin().
Эта функция была введена в Qt 5.8.
[since 5.8] QRegion::const_reverse_iterator QRegion::crend() const
То же самое, что и rend().
Эта функция была введена в Qt 5.8.
[since 5.8] QRegion::const_iterator QRegion::end() const
Возвращает const_iterator, указывающий на элемент после конца диапазона непересекающихся прямоугольников, составляющих область.
Объединение всех прямоугольников равно исходной области.
Эта функция была введена в Qt 5.8.
См. также rend(), cend() и begin().
[static, since 6.0] QRegion QRegion::fromHRGN(HRGN hrgn)
Возвращает QRegion, эквивалентную заданному hrgn.
Эта функция была введена в Qt 6.0.
QRegion QRegion::intersected(const QRegion &r) const
Возвращает область, являющуюся пересечением этой области и r.
На рисунке показано пересечение двух эллиптических областей.
См. также subtracted(), united() и xored().
QRegion QRegion::intersected(const QRect &rect) const
Возвращает область, являющуюся пересечением этой области и заданного rect.
См. также subtracted(), united() и xored().
bool QRegion::intersects(const QRegion ®ion) const
Возвращает true если эта область пересекается с region, в противном случае возвращает false.
bool QRegion::intersects(const QRect &rect) const
Возвращает true если эта область пересекается с rect, в противном случае возвращает false.
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
[since 5.0] bool QRegion::isNull() const
Возвращает true если область пустая; в противном случае возвращает false. Пустая область — это область, не содержащая ни одной точки. Эта функция эквивалентна isEmpty().
Эта функция была добавлена в Qt 5.0.
См. также isEmpty().
[since 5.8] QRegion::const_reverse_iterator QRegion::rbegin() const
Возвращает const_reverse_iterator, указывающий на начало диапазона непересекающихся прямоугольников, образующих область.
Объединение всех прямоугольников равно исходной области.
Эта функция была добавлена в Qt 5.8.
См. также begin(), crbegin() и rend().
int QRegion::rectCount() const
Возвращает количество прямоугольников, из которых состоит эта область. Эквивалентно end() - begin().
[since 5.8] 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 как дополнительный.
QRegion QRegion::subtracted(const QRegion &r) const
Возвращает область, полученную вычитанием r из этой области.
Рисунок показывает результат вычитания эллипса справа из эллипса слева (left - right).
См. также intersected(), united() и xored().
void QRegion::swap(QRegion &other)
Меняет местами области other и эту область. Эта операция очень быстрая и никогда не завершается ошибкой.
[since 6.0] HRGN QRegion::toHRGN() const
Возвращает HRGN, эквивалентный заданной области.
Эта функция была добавлена в Qt 6.0.
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, относительно текущего положения. Положительные значения перемещают область вправо и вниз.
См. также translate().
QRegion QRegion::translated(const QPoint &p) const
Это перегруженный метод.
Возвращает копию области, сдвинутой на p.x() по оси X и p.y() по оси Y, относительно текущего положения. Положительные значения перемещают прямоугольник вправо и вниз.
См. также translate().
QRegion QRegion::united(const QRegion &r) const
Возвращает область, являющуюся объединением этой области и r.
На рисунке показано объединение двух эллиптических областей.
См. также intersected(), subtracted() и xored().
QRegion QRegion::united(const QRect &rect) const
Возвращает область, являющуюся объединением этой области и заданного rect.
См. также intersected(), subtracted() и xored().
QRegion QRegion::xored(const QRegion &r) const
Возвращает область, являющуюся исключающим ИЛИ (XOR) этой области и r.
На рисунке показано исключающее ИЛИ двух эллиптических областей.
См. также intersected(), united() и subtracted().
QVariant 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
Это перегруженный метод.
QRegion &QRegion::operator&=(const QRegion &r)
Применяет функцию intersected() к этой области и r и присваивает результат этой области. r1&=r2 эквивалентно r1 = r1.intersected(r2).
См. также intersected().
QRegion &QRegion::operator&=(const QRect &r)
Это перегруженный метод.
QRegion QRegion::operator+(const QRegion &r) const
Применяет функцию united() к этой области и r. r1+r2 эквивалентно r1.united(r2).
См. также united() и operator|().
QRegion QRegion::operator+(const QRect &r) const
Это перегруженный метод.
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().
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-6.0/qregion.html