Spec-Zone.ru › Qt 6.0

Класс QRubberBand

Класс QRubberBand предоставляет прямоугольник или линию, которые могут указывать на выделение или границу. Подробнее...

Заголовок: #include <QRubberBand>
CMake: find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets)
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(), чтобы сделать резиновую ленту видимой; также, когда резиновая лента не является виджетом верхнего уровня. Скрытие или уничтожение виджета приведет к исчезновению резиновой ленты. Резиновая лента может быть прямоугольником или линией (вертикальной или горизонтальной), в зависимости от 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) будет использовать маску, поэтому видна будет только небольшая граница прямоугольника. Некоторые стили (например, native 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.0/qrubberband.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API