Spec-Zone.ru › Qt

Класс 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::AlignLeft
  • Qt::AlignHCenter
  • Qt::AlignRight
  • Qt::AlignTop
  • Qt::AlignVCenter
  • Qt::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 области прокрутки.

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.2/qscrollarea.html

Spec-Zone.ru

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