Spec-Zone.ru › Qt 6.1

Класс QRubberBand

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

Заголовок: #include <QRubberBand>
CMake: find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Наследуется от: QWidget
  • Список всех членов, включая унаследованные

Типы public

Перечисление Shape { Line, Rectangle }

Открытые функции

QRubberBand(QRubberBand::Shape s, QWidget *p = nullptr)
virtual ~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

Защищенные функции

virtual void инициализироватьСтильОпцию(QStyleOptionRubberBand *option) const

Переопределенные защищенные функции

virtual void событиеИзменения(QEvent *e) override
virtual bool событие(QEvent *e) override
virtual void событиеПеремещения(QMoveEvent *) override
virtual void событиеРисования(QPaintEvent *) override
virtual void событиеИзмененияРазмера(QResizeEvent *) override
virtual 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 будет действовать как виджет верхнего уровня.

Вызовите отобразить(), чтобы сделать резиновую полосу видимой; также, когда резиновая полоса не является виджетом верхнего уровня. Скрытие или уничтожение виджета приведет к исчезновению резиновой полосы. Резиновая полоса может быть прямоугольной или линейной (вертикальной или горизонтальной), в зависимости от формы(), заданной ей при создании.

Документация по типам членов

перечисление 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::событиеИзменения(QEvent *e)

Переопределяет: QWidget::changeEvent(QEvent *event).

[override virtual protected] bool QRubberBand::событие(QEvent *e)

Переопределяет: QWidget::event(QEvent *event).

[virtual 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)

Устанавливает геометрию резиновой полосы в прямоугольник, указанный в системе координат родительского виджета.

См. также 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.1/qrubberband.html

Spec-Zone.ru

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