Spec-Zone.ru › Qt

Класс 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

Spec-Zone.ru

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