Класс 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 |
- 214 открытых функций, унаследованных от QWidget
- 31 открытых функций, унаследованных от QObject
- 14 открытых функций, унаследованных от QPaintDevice
Статические открытые члены
| const QMetaObject | staticMetaObject |
- 5 статических открытых членов, унаследованных от QWidget
- 9 статических открытых членов, унаследованных от QObject
Защищённые функции
| 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 |
- 35 защищённых функций, унаследованных от QWidget
- 9 защищённых функций, унаследованных от QObject
- 1 защищённая функция, унаследованная от QPaintDevice
Дополнительные унаследованные члены
- 59 свойств, унаследованных от QWidget
- 1 свойства, унаследованного от QObject
- 19 открытых слотов, унаследованных от QWidget
- 1 открытого слота, унаследованного от QObject
- 3 сигналов, унаследованных от QWidget
- 2 сигналов, унаследованных от QObject
- 1 защищённого слота, унаследованного от QWidget
Подробное описание
Класс QRubberBand предоставляет прямоугольник или линию, которые могут указывать на выделение или границу.
Резиновая полоса часто используется для отображения новой области ограничителя (например, в 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 |
Резиновая полоса может представлять вертикальную или горизонтальную линию. Геометрия всё ещё задаётся в rect(), и линия заполнит заданную геометрию в большинстве стилей. |
QRubberBand::Rectangle |
1 |
Резиновая полоса может представлять прямоугольник. Некоторые стили будут интерпретировать это как заполненный (часто полупрозрачный) прямоугольник или прямоугольную обводку. |
Документация по документации функций членов
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().
[override virtual protected] bool QRubberBand::event(QEvent *e)
Переопределено из QWidget::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().
[override virtual protected] void QRubberBand::paintEvent(QPaintEvent *)
Переопределено из QWidget::paintEvent().
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().
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().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qrubberband.html