Класс QRegion
Класс QRegion задаёт область обрезки для рисования. Подробнее...
| Заголовок: | #include <QRegion> |
| qmake: | QT += gui |
Открытые типы
| перечисление | RegionType { Rectangle, Ellipse } |
| typedef | const_iterator |
| typedef | const_reverse_iterator |
Public Functions
| 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) |
Related Non-Members
| 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() или циклов 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
} См. также 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 данному экземпляру QRegion.
Эта функция была добавлена в 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 и затем X (по возрастанию X для одинакового 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 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 &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.15/qregion.html