Класс QScrollArea
Класс QScrollArea предоставляет прокручиваемое представление другого виджета. Подробнее...
| Заголовок: | #include <QScrollArea> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследует: | QAbstractScrollArea |
Свойства
- alignment : Qt::Alignment
- widgetResizable : bool
Открытые функции
| QScrollArea(QWidget *parent = nullptr) | |
| virtual | ~QScrollArea() |
| Qt::Alignment | alignment() const |
| void | ensureVisible(int x, int y, int xmargin = 50, int ymargin = 50) |
| void | ensureWidgetVisible(QWidget *childWidget, int xmargin = 50, int ymargin = 50) |
| void | setAlignment(Qt::Alignment) |
| void | setWidget(QWidget *widget) |
| void | setWidgetResizable(bool resizable) |
| QWidget * | takeWidget() |
| QWidget * | widget() const |
| bool | widgetResizable() const |
Переопределённые открытые функции
| virtual bool | focusNextPrevChild(bool next) override |
| virtual QSize | sizeHint() const override |
Переопределённые защищённые функции
| virtual bool | event(QEvent *e) override |
| virtual bool | eventFilter(QObject *o, QEvent *e) override |
| virtual void | resizeEvent(QResizeEvent *) override |
| virtual void | scrollContentsBy(int dx, int dy) override |
| virtual QSize | viewportSizeHint() const override |
Подробное описание
Область прокрутки используется для отображения содержимого дочернего виджета в рамках фрейма. Если размер виджета превышает размер фрейма, отображение может предоставить полосы прокрутки, чтобы можно было просмотреть весь виджет-потомок. Дочерний виджет должен быть указан с помощью setWidget(). Например:
QLabel *imageLabel = new QLabel;
QImage image("happyguy.png");
imageLabel->setPixmap(QPixmap::fromImage(image));
scrollArea = new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel); Код выше создает область прокрутки (показанную на изображениях ниже) содержащую метку изображения. При масштабировании изображения область прокрутки может предоставить необходимые полосы прокрутки:
Вид полос прокрутки зависит от текущих установленных политик полос прокрутки. Вы можете управлять внешним видом полос прокрутки с помощью унаследованных функций от QAbstractScrollArea.
Например, вы можете установить свойства QAbstractScrollArea::horizontalScrollBarPolicy и QAbstractScrollArea::verticalScrollBarPolicy. Или если вы хотите, чтобы полосы прокрутки динамически подстраивались при изменении содержимого области прокрутки, вы можете использовать функции horizontalScrollBar() и verticalScrollBar() (которые позволяют получить доступ к полосам прокрутки) и устанавливать значения полос прокрутки всякий раз, когда содержимое области прокрутки изменяется, используя функцию QScrollBar::setValue().
Вы можете получить доступ к дочернему виджету с помощью функции widget(). Представление можно сделать масштабируемым с помощью функции setWidgetResizable(). Выравнивание виджета можно указать с помощью setAlignment().
Две вспомогательные функции ensureVisible() и ensureWidgetVisible() обеспечивают видимость определённого региона содержимого внутри области просмотра, прокручивая содержимое при необходимости.
Рекомендации по размерам и макеты
При использовании области прокрутки для отображения содержимого пользовательского виджета, важно убедиться, что рекомендация размера дочернего виджета имеет подходящее значение. Если используется стандартный QWidget для дочернего виджета, может потребоваться вызов QWidget::setMinimumSize() для корректного отображения содержимого виджета внутри области прокрутки.
Если область прокрутки используется для отображения содержимого виджета, содержащего дочерние виджеты, организованные в макете, важно понимать, что политика размера макета также будет определять размер виджета. Это особенно полезно знать, если вы планируете динамически изменять содержимое макета. В таких случаях установка свойства ограничения размера макета на значение, которое обеспечивает ограничения минимального и/или максимального размера макета (например, QLayout::SetMinAndMaxSize) приведёт к обновлению размера области прокрутки всякий раз, когда содержимое макета изменяется.
Полный пример использования класса QScrollArea см. в примере Image Viewer. Пример демонстрирует, как комбинировать QLabel и QScrollArea для отображения изображения.
См. также QAbstractScrollArea, QScrollBar, и Пример Image Viewer.
Документация по свойствам
alignment : Qt::Alignment
Это свойство содержит выравнивание виджета области прокрутки
Допустимое выравнивание — это комбинация следующих флагов:
Qt::AlignLeftQt::AlignHCenterQt::AlignRightQt::AlignTopQt::AlignVCenterQt::AlignBottom
По умолчанию виджет остается привязанным к верхнему левому углу области прокрутки.
Функции доступа:
| Qt::Alignment | alignment() const |
| void | setAlignment(Qt::Alignment) |
widgetResizable : bool
Это свойство определяет, следует ли области прокрутки изменять размер виджета
Если это свойство установлено в false (по умолчанию), область прокрутки учитывает размер своего виджета. Независимо от этого свойства, вы можете программно изменить размер виджета с помощью widget()->resize(), и область прокрутки автоматически скорректирует себя до нового размера.
Если это свойство установлено в true, область прокрутки автоматически изменит размер виджета, чтобы избежать полос прокрутки, когда это возможно, или использовать дополнительное пространство.
Функции доступа:
| bool | widgetResizable() const |
| void | setWidgetResizable(bool resizable) |
Документация по функциям-членам
QScrollArea::QScrollArea(QWidget *parent = nullptr)
Создает пустую область прокрутки с заданным parent.
См. также setWidget().
[virtual] QScrollArea::~QScrollArea()
Уничтожает область прокрутки и её дочерний виджет.
См. также setWidget().
void QScrollArea::ensureVisible(int x, int y, int xmargin = 50, int ymargin = 50)
Прокручивает содержимое области прокрутки таким образом, чтобы точка (x, y) была видна внутри области просмотра с отступами, заданными в пикселях параметрами xmargin и ymargin. Если заданную точку нельзя достичь, содержимое прокручивается до ближайшей допустимой позиции. Значение по умолчанию для обоих отступов составляет 50 пикселей.
void QScrollArea::ensureWidgetVisible(QWidget *childWidget, int xmargin = 50, int ymargin = 50)
Прокручивает содержимое области прокрутки так, чтобы childWidget объекта QScrollArea::widget() был виден внутри области просмотра с отступами, заданными в пикселях параметрами xmargin и ymargin. Если заданную точку нельзя достичь, содержимое прокручивается до ближайшей допустимой позиции. Значение по умолчанию для обоих отступов составляет 50 пикселей.
[override virtual protected] bool QScrollArea::event(QEvent *e)
Переопределяет: QAbstractScrollArea::event(QEvent *event).
[override virtual protected] bool QScrollArea::eventFilter(QObject *o, QEvent *e)
Переопределяет: QObject::eventFilter(QObject *watched, QEvent *event).
[override virtual] bool QScrollArea::focusNextPrevChild(bool next)
Переопределяет: QWidget::focusNextPrevChild(bool next).
[override virtual protected] void QScrollArea::resizeEvent(QResizeEvent *)
Переопределяет: QAbstractScrollArea::resizeEvent(QResizeEvent *event).
[override virtual protected] void QScrollArea::scrollContentsBy(int dx, int dy)
Переопределяет: QAbstractScrollArea::scrollContentsBy(int dx, int dy).
void QScrollArea::setWidget(QWidget *widget)
Устанавливает виджет области прокрутки.
widget становится дочерним элементом области прокрутки и будет удален при удалении области прокрутки или при установке нового виджета.
Свойство autoFillBackground виджета будет установлено в true.
Если область прокрутки видна при добавлении widget, необходимо явно вызвать show() для него.
Обратите внимание, что необходимо добавить макет widget до вызова этой функции; если добавить его позже, widget не будет виден — независимо от того, когда вы вызовете show() для области прокрутки. В этом случае вы также не сможете вызвать show() для widget позже.
См. также widget().
[override virtual] QSize QScrollArea::sizeHint() const
Переопределяет: QAbstractScrollArea::sizeHint() const.
QWidget *QScrollArea::takeWidget()
Удаляет виджет области прокрутки и передает владение им вызывающему коду.
См. также widget().
[override virtual protected] QSize QScrollArea::viewportSizeHint() const
Переопределяет: QAbstractScrollArea::viewportSizeHint() const.
QWidget *QScrollArea::widget() const
Возвращает виджет области прокрутки или nullptr, если он отсутствует.
См. также setWidget().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qscrollarea.html