Spec-Zone.ru › Qt 5.15

Класс 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(), чтобы сделать резиновую полосу видимой; также когда резиновая полоса не является виджетом верхнего уровня. Скрытие или уничтожение виджета сделает резиновую полосу невидимой. Резиновая полоса может быть Прямоугольником или Линией (вертикальной или горизонтальной), в зависимости от 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.15/qrubberband.html

Spec-Zone.ru

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