Класс QRubberBand
Класс QRubberBand предоставляет прямоугольник или линию, которые могут указывать на выделение или границу. Подробнее...
| Заголовок: | #include <QRubberBand> |
| qmake: | QT += widgets |
| Наследуется от: | QWidget |
Открытые типы
| Перечисление | Shape { Линия, Прямоугольник } |
Открытые функции
| QRubberBand(QRubberBand::Shape s, QWidget *p = nullptr) | |
| виртуальный | ~QRubberBand() |
| void | переместить(int x, int y) |
| void | переместить(const QPoint &p) |
| void | изменитьРазмер(int width, int height) |
| void | изменитьРазмер(const QSize &size) |
| void | установитьГеометрию(const QRect &rect) |
| void | установитьГеометрию(int x, int y, int width, int height) |
| QRubberBand::Shape | форма() const |
Защищённые функции
| void | инициализироватьСтильОпции(QStyleOptionRubberBand *option) const |
Переопределённые защищённые функции
| виртуальный void | обработкаСобытийИзменений(QEvent *e) override |
| виртуальный bool | обработкаСобытия(QEvent *e) override |
| виртуальный void | событиеПеремещения(QMoveEvent *) override |
| виртуальный void | событиеРисования(QPaintEvent *) override |
| виртуальный void | событиеИзмененияРазмеры(QResizeEvent *) override |
| виртуальный void | событиеОтображения(QShowEvent *e) override |
Подробное описание
Резиновая лента часто используется для отображения новой области ограничивающей рамки (например, в QSplitter или QDockWidget, который открепляется). Исторически это реализовывалось с помощью QPainter и XOR, но этот подход не всегда работает корректно, так как отрисовка может происходить в окне под резиновой лентой, но до того, как резиновая лента была "стерта".
Вы можете создать QRubberBand всякий раз, когда вам нужно отрисовать резиновую ленту вокруг заданной области (или представить одну линию), а затем вызвать установитьГеометрию(), переместить() или изменитьРазмер(), чтобы установить ее позицию и размер. Общий шаблон состоит в том, чтобы делать это в сочетании с событиями мыши. Например:
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(), чтобы сделать резиновую ленту видимой; также, когда резиновая лента не является виджетом верхнего уровня. Скрытие или уничтожение виджета сделает резиновую ленту невидимой. Резиновая лента может быть прямоугольником или линией (вертикальной или горизонтальной) в зависимости от значения форма(), которое было задано при ее создании.
Документация по типам членов
перечисление QRubberBand::Shape
Это перечисление определяет, какую форму должна иметь QRubberBand. Это подсказка для рисования, которая передается системе стилей и может интерпретироваться каждым QStyle.
| Константа | Значение | Описание |
|---|---|---|
QRubberBand::Line |
0 |
Резиновая лента может представлять вертикальную или горизонтальную линию. Геометрия все еще задается в rect(), и линия будет заполнять заданную геометрию в большинстве стилей. |
QRubberBand::Rectangle |
1 |
Резиновая лента может представлять собой прямоугольник. Некоторые стили будут интерпретировать это как заполненный (часто полупрозрачный) прямоугольник или прямоугольную границу. |
Документация по функциям-членам
QRubberBand::QRubberBand(QRubberBand::Shape s, QWidget *p = nullptr)
Создает резиновую ленту формы s с родительским элементом p.
По умолчанию прямоугольная резиновая лента (s это Rectangle) будет использовать маску, поэтому видна только небольшая граница прямоугольника. Некоторые стили (например, родной macOS) изменят это и вызовут QWidget::setWindowOpacity(), чтобы создать полупрозрачный заполненный прямоугольник выделения.
[virtual] QRubberBand::~QRubberBand()
Деструктор.
[override virtual protected] void QRubberBand::обработкаСобытийИзменений(QEvent *e)
Переопределяет: QWidget::changeEvent(QEvent *event).
[override virtual protected] bool QRubberBand::обработкаСобытия(QEvent *e)
Переопределяет: QWidget::event(QEvent *event).
[protected] void QRubberBand::инициализироватьСтильОпции(QStyleOptionRubberBand *option) const
Инициализирует option значениями из этой QRubberBand. Этот метод полезен для подклассов, когда им требуется QStyleOptionRubberBand, но они не хотят сами заполнять всю информацию.
См. также QStyleOption::initFrom().
void QRubberBand::переместить(int x, int y)
Перемещает резиновую ленту в точку (x, y).
См. также изменитьРазмер().
void QRubberBand::переместить(const QPoint &p)
Это перегруженная функция.
Перемещает резиновую ленту в точку p.
См. также изменитьРазмер().
[override virtual protected] void QRubberBand::событиеПеремещения(QMoveEvent *)
Переопределяет: QWidget::moveEvent(QMoveEvent *event).
[override virtual protected] void QRubberBand::событиеРисования(QPaintEvent *)
Переопределяет: QWidget::paintEvent(QPaintEvent *event).
void QRubberBand::изменитьРазмер(int width, int height)
Изменяет размер резиновой ленты так, чтобы ее ширина была width, а высота — height.
См. также переместить().
void QRubberBand::изменитьРазмер(const QSize &size)
Это перегруженная функция.
Изменяет размер резиновой ленты на новый размер size.
См. также переместить().
[override virtual protected] void QRubberBand::событиеИзмененияРазмеры(QResizeEvent *)
Переопределяет: QWidget::resizeEvent(QResizeEvent *event).
void QRubberBand::установитьГеометрию(const QRect &rect)
Устанавливает геометрию резиновой ленты на 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-5.13/qrubberband.html