Класс QRubberBand
Класс QRubberBand предоставляет прямоугольник или линию, которые могут указывать на выделение или границу. Подробнее...
| Заголовок: | #include <QRubberBand> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследуется от: | QWidget |
Открытые типы
| перечисление | Shape { Линия, Прямоугольник } |
Открытые функции
| QRubberBand(QRubberBand::Shape s, QWidget *p = nullptr) | |
| виртуальный | ~QRubberBand() |
| void | move(int x, int y) |
| void | move(const QPoint &p) |
| void | resize(int width, int height) |
| void | resize(const QSize &size) |
| void | setGeometry(const QRect &rect) |
| void | setGeometry(int x, int y, int width, int height) |
| QRubberBand::Shape | shape() const |
Защищенные функции
| виртуальный void | initStyleOption(QStyleOptionRubberBand *option) const |
Переопределённые защищённые функции
| виртуальный void | changeEvent(QEvent *e) override |
| виртуальный bool | event(QEvent *e) override |
| виртуальный void | moveEvent(QMoveEvent *) override |
| виртуальный void | paintEvent(QPaintEvent *) override |
| виртуальный void | resizeEvent(QResizeEvent *) override |
| виртуальный void | showEvent(QShowEvent *e) override |
Подробное описание
Резиновый прямоугольник часто используется для отображения новой области ограничивающих элементов (например, в QSplitter или QDockWidget, которые открепляются). В историческом плане это реализовывалось с помощью QPainter и XOR, но этот подход не всегда работает корректно, поскольку отрисовка может происходить в окне ниже резинового прямоугольника, но до того, как резиновый прямоугольник был «стираемым».
Вы можете создавать QRubberBand всякий раз, когда вам нужно отображать резиновый прямоугольник вокруг заданной области (или для представления одной линии), а затем вызывать setGeometry(), move() или resize() для его позиционирования и изменения размера. Распространённый шаблон заключается в выполнении этих операций в сочетании с событиями мыши. Например:
void Widget::mousePressEvent(QMouseEvent *event)
{
origin = event->pos();
if (!rubberBand)
rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
rubberBand->setGeometry(QRect(origin, QSize()));
rubberBand->show();
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
rubberBand->setGeometry(QRect(origin, event->pos()).normalized());
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
rubberBand->hide();
// determine selection, for example using QRect::intersects()
// and QRect::contains().
} Если вы передаёте родительский объект конструктору QRubberBand, резиновый прямоугольник будет отображаться только внутри своего родителя, но останется поверх других дочерних виджетов. Если родительский объект не передаётся, QRubberBand будет действовать как виджет верхнего уровня.
Вызовите show(), чтобы сделать резиновый прямоугольник видимым; также, когда резиновый прямоугольник не является виджетом верхнего уровня. Скрытие или уничтожение виджета заставит резиновый прямоугольник исчезнуть. Резиновый прямоугольник может быть Прямоугольником или Линией (вертикальной или горизонтальной), в зависимости от shape(), который был задан при его создании.
Документация по типу члена
перечисление QRubberBand::Shape
Это перечисление определяет, какую форму должен иметь QRubberBand. Это подсказка для отрисовки, которая передаётся системе стилей, и может быть интерпретирована каждым QStyle.
| Константа | Значение | Описание |
|---|---|---|
QRubberBand::Line |
0 |
QRubberBand может представлять вертикальную или горизонтальную линию. Геометрия всё ещё задаётся в rect(), и линия будет заполнять заданную геометрию в большинстве стилей. |
QRubberBand::Rectangle |
1 |
QRubberBand может представлять прямоугольник. Некоторые стили будут интерпретировать это как заполненный (часто полупрозрачный) прямоугольник или прямоугольную обводку. |
Документация по документации функций члена
QRubberBand::QRubberBand(QRubberBand::Shape s, QWidget *p = nullptr)
Создаёт резиновый прямоугольник формы s с родителем p.
По умолчанию прямоугольный резиновый прямоугольник (s — Rectangle) будет использовать маску, так что видна только небольшая граница прямоугольника. Некоторые стили (например, родной macOS) изменят это и вызовут QWidget::setWindowOpacity() для создания полупрозрачного заполненного прямоугольника выделения.
[virtual] QRubberBand::~QRubberBand()
Деструктор.
[override virtual protected] void QRubberBand::changeEvent(QEvent *e)
Переопределяет: QWidget::changeEvent(QEvent *event).
[override virtual protected] bool QRubberBand::event(QEvent *e)
Переопределяет: QWidget::event(QEvent *event).
[virtual protected] void QRubberBand::initStyleOption(QStyleOptionRubberBand *option) const
Инициализирует option значениями из этого QRubberBand. Этот метод полезен для подклассов, когда им нужен QStyleOptionRubberBand, но они не хотят заполнять всю информацию самостоятельно.
См. такжеQStyleOption::initFrom().
void QRubberBand::move(int x, int y)
Перемещает резиновый прямоугольник в точку (x, y).
См. такжеresize().
void QRubberBand::move(const QPoint &p)
Это перегруженная функция.
Перемещает резиновый прямоугольник в точку p.
См. такжеresize().
[override virtual protected] void QRubberBand::moveEvent(QMoveEvent *)
Переопределяет: QWidget::moveEvent(QMoveEvent *event).
[override virtual protected] void QRubberBand::paintEvent(QPaintEvent *)
Переопределяет: QWidget::paintEvent(QPaintEvent *event).
void QRubberBand::resize(int width, int height)
Изменяет размер резинового прямоугольника так, чтобы его ширина была width, а высота — height.
См. такжеmove().
void QRubberBand::resize(const QSize &size)
Это перегруженная функция.
Изменяет размер резинового прямоугольника так, чтобы его новый размер был size.
См. такжеmove().
[override virtual protected] void QRubberBand::resizeEvent(QResizeEvent *)
Переопределяет: QWidget::resizeEvent(QResizeEvent *event).
void QRubberBand::setGeometry(const QRect &rect)
Устанавливает геометрию резиновой полосы в прямоугольник, указанный в системе координат родительского виджета.
См. также QWidget::geometry.
void QRubberBand::setGeometry(int x, int y, int width, int height)
Это перегруженный метод.
Устанавливает геометрию резиновой полосы в прямоугольник, верхний левый угол которого расположен в точке (x, y), а размеры заданы значениями width и height. Геометрия задается в системе координат родительского виджета.
QRubberBand::Shape QRubberBand::shape() const
Возвращает форму этой резиновой полосы. Форму можно задать только при создании.
[override virtual protected] void QRubberBand::showEvent(QShowEvent *e)
Переопределяет: QWidget::showEvent(QShowEvent *event).
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qrubberband.html