Класс QRubberBand
Класс QRubberBand предоставляет прямоугольник или линию, которые могут указывать на выделение или границу. Подробнее...
| Заголовок: | #include <QRubberBand> |
| qmake: | QT += widgets |
| Наследует: | QWidget |
Открытые типы
| Перечисление | Shape { Line, Rectangle } |
Открытые функции
| 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(), чтобы сделать резиновую полосу видимой; также когда резиновая полоса не является виджетом верхнего уровня. Скрытие или уничтожение виджета сделает резиновую полосу невидимой. Резиновая полоса может быть Rectangle или Line (вертикальной или горизонтальной), в зависимости от 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).
[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)
Устанавливает геометрию резиновой полосы на 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.14/qrubberband.html