Класс 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. Границы прямоугольника можно найти с помощью 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 |
область является эллипсом внутри прямоугольника. |
typedef QRegion::const_iterator
Итератор по неперекрывающимся прямоугольникам, составляющим область.
Объединение всех прямоугольников равно исходной области.
QRegion не предлагает изменяемые итераторы.
Этот typedef был введён в Qt 5.8.
typedef 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 (Y - основная сортировка, X - дополнительная) и следовать этим ограничениям:
- Прямоугольники не должны пересекаться.
- Все прямоугольники с заданной координатой 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 &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.14/qregion.html