Spec-Zone.ru › Qt 6.1

Класс QAbstractScrollArea

Виджет QAbstractScrollArea предоставляет область прокрутки с полосами прокрутки по требованию. Подробнее...

Заголовок: #include <QAbstractScrollArea>
CMake: find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Наследует: QFrame
Наследуется от:

QAbstractItemView, QGraphicsView, QMdiArea, QPlainTextEdit, QScrollArea и QTextEdit

  • Список всех членов, включая унаследованные

Типы публичного доступа

перечисление SizeAdjustPolicy { AdjustIgnored, AdjustToContents, AdjustToContentsOnFirstShow }

Свойства

  • horizontalScrollBarPolicy : Qt::ScrollBarPolicy
  • sizeAdjustPolicy : SizeAdjustPolicy
  • verticalScrollBarPolicy : Qt::ScrollBarPolicy

Публичные функции

QAbstractScrollArea(QWidget *parent = nullptr)
виртуальный ~QAbstractScrollArea()
void addScrollBarWidget(QWidget *widget, Qt::Alignment alignment)
QWidget * cornerWidget() const
QScrollBar * horizontalScrollBar() const
Qt::ScrollBarPolicy horizontalScrollBarPolicy() const
QSize maximumViewportSize() const
QWidgetList scrollBarWidgets(Qt::Alignment alignment)
void setCornerWidget(QWidget *widget)
void setHorizontalScrollBar(QScrollBar *scrollBar)
void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy)
void setSizeAdjustPolicy(QAbstractScrollArea::SizeAdjustPolicy policy)
void setVerticalScrollBar(QScrollBar *scrollBar)
void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy)
void setViewport(QWidget *widget)
виртуальный void setupViewport(QWidget *viewport)
QAbstractScrollArea::SizeAdjustPolicy sizeAdjustPolicy() const
QScrollBar * verticalScrollBar() const
Qt::ScrollBarPolicy verticalScrollBarPolicy() const
QWidget * viewport() const

Переопределённые публичные функции

виртуальный QSize minimumSizeHint() const override
виртуальный QSize sizeHint() const override

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

виртуальный void scrollContentsBy(int dx, int dy)
void setViewportMargins(int left, int top, int right, int bottom)
void setViewportMargins(const QMargins &margins)
виртуальный bool viewportEvent(QEvent *event)
QMargins viewportMargins() const
виртуальный QSize viewportSizeHint() const

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

виртуальный void contextMenuEvent(QContextMenuEvent *e) override
виртуальный void dragEnterEvent(QDragEnterEvent *event) override
виртуальный void dragLeaveEvent(QDragLeaveEvent *event) override
виртуальный void dragMoveEvent(QDragMoveEvent *event) override
виртуальный void dropEvent(QDropEvent *event) override
виртуальный bool event(QEvent *event) override
виртуальный void keyPressEvent(QKeyEvent *e) override
виртуальный void mouseDoubleClickEvent(QMouseEvent *e) override
виртуальный void mouseMoveEvent(QMouseEvent *e) override
виртуальный void mousePressEvent(QMouseEvent *e) override
виртуальный void mouseReleaseEvent(QMouseEvent *e) override
виртуальный void paintEvent(QPaintEvent *event) override
виртуальный void resizeEvent(QResizeEvent *event) override
виртуальный void wheelEvent(QWheelEvent *e) override

Подробное описание

QAbstractScrollArea — это абстрактный базовый класс области прокрутки. Область имеет центральный виджет, называемый viewport, в котором отображается содержимое области прокрутки (т.е. видимые части содержимого отображаются в viewport).

Рядом с viewport расположен вертикальный ползунок прокрутки, а ниже — горизонтальный. Когда всё содержимое области помещается в viewport, каждый ползунок прокрутки может быть либо виден, либо скрыт в зависимости от Qt::ScrollBarPolicy ползунка. Когда ползунок скрыт, viewport расширяется, чтобы занять всё доступное пространство. Когда ползунок снова становится видимым, viewport уменьшается, чтобы освободить место для ползунка.

Можно зарезервировать область отступа вокруг viewport, см. setViewportMargins(). Эта функция в основном используется для размещения виджета QHeaderView над или рядом с областью прокрутки. Подклассы QAbstractScrollArea должны реализовывать отступы.

При наследовании от QAbstractScrollArea необходимо выполнить следующие действия:

  • Управлять ползунками прокрутки, задавая их диапазон, значение, шаг страницы и отслеживая их перемещения.
  • Отображать содержимое области в viewport в соответствии со значениями ползунков прокрутки.
  • Обрабатывать события, полученные viewport в viewportEvent() — в частности, события изменения размера.
  • Использовать viewport->update() для обновления содержимого viewport вместо update(), так как все операции рисования выполняются на viewport.

При политике прокрутки Qt::ScrollBarAsNeeded (по умолчанию) QAbstractScrollArea отображает ползунки прокрутки, когда они обеспечивают ненулевой диапазон прокрутки, и скрывает их в противном случае.

Ползунки прокрутки и viewport должны обновляться всякий раз, когда viewport получает событие изменения размера или изменяется размер содержимого. Viewport также должен обновляться, когда меняются значения ползунков прокрутки. Начальные значения ползунков часто задаются при получении новой области содержимого.

Мы приводим простой пример, в котором реализована область прокрутки, способная прокручивать любой QWidget. Мы делаем виджет дочерним элементом viewport; таким образом, нам не нужно рассчитывать, какую часть виджета нужно отрисовать, а можно просто перемещать виджет с помощью QWidget::move(). Когда содержимое области или размер viewport изменяется, мы выполняем следующие действия:

    QSize areaSize = viewport()->size();
    QSize  widgetSize = widget->size();

    verticalScrollBar()->setPageStep(areaSize.height());
    horizontalScrollBar()->setPageStep(areaSize.width());
    verticalScrollBar()->setRange(0, widgetSize.height() - areaSize.height());
    horizontalScrollBar()->setRange(0, widgetSize.width() - areaSize.width());
    updateWidgetPosition();

Когда меняются значения ползунков прокрутки, нам нужно обновить положение виджета, то есть найти часть виджета, которая должна быть отображена в viewport:

    int hvalue = horizontalScrollBar()->value();
    int vvalue = verticalScrollBar()->value();
    QPoint topLeft = viewport()->rect().topLeft();

    widget->move(topLeft.x() - hvalue, topLeft.y() - vvalue);

Для отслеживания перемещения ползунков прокрутки переопределите виртуальную функцию scrollContentsBy(). Для точной настройки поведения прокрутки подключитесь к сигналу QAbstractSlider::actionTriggered() ползунка и настройте QAbstractSlider::sliderPosition по своему усмотрению.

Для удобства QAbstractScrollArea делает все события viewport доступными в виртуальном обработчике viewportEvent(). Специализированные обработчики QWidget перенаправляются на события viewport в тех случаях, когда это имеет смысл. Перенаправленные специализированные обработчики: paintEvent(), mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), wheelEvent(), dragEnterEvent(), dragMoveEvent(), dragLeaveEvent(), dropEvent(), contextMenuEvent() и resizeEvent().

QScrollArea, наследующий QAbstractScrollArea, обеспечивает плавную прокрутку для любого QWidget (т.е. виджет прокручивается по пикселям). Вам нужно наследоваться от QAbstractScrollArea только в том случае, если вам нужно более специализированное поведение. Например, это верно, если всё содержимое области не подходит для отображения на QWidget или если вы не хотите плавную прокрутку.

См. также QScrollArea.

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

[since 5.2] перечисление QAbstractScrollArea::SizeAdjustPolicy

Это перечисление определяет, как должна подстраиваться размерная подсказка QAbstractScrollArea при изменении размера viewport.

Постоянная Значение Описание
QAbstractScrollArea::AdjustIgnored 0 Область прокрутки будет вести себя как раньше — и не будет производить никаких настроек.
QAbstractScrollArea::AdjustToContents 2 Область прокрутки всегда будет подстраиваться под viewport
QAbstractScrollArea::AdjustToContentsOnFirstShow 1 Область прокрутки будет подстраиваться под viewport в первый раз при отображении.

Это перечисление было введено или изменено в Qt 5.2.

Документация свойств

horizontalScrollBarPolicy : Qt::ScrollBarPolicy

Это свойство содержит политику для горизонтального ползунка прокрутки

Политика по умолчанию — Qt::ScrollBarAsNeeded.

Функции доступа:

Qt::ScrollBarPolicy horizontalScrollBarPolicy() const
void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy)

См. также verticalScrollBarPolicy.

[since 5.2] sizeAdjustPolicy : SizeAdjustPolicy

Это свойство содержит политику, описывающую, как изменяется размер области прокрутки при изменении размера viewport.

Политика по умолчанию — QAbstractScrollArea::AdjustIgnored. Изменение этого свойства может фактически изменить размер области прокрутки.

Это свойство было введено в Qt 5.2.

Функции доступа:

QAbstractScrollArea::SizeAdjustPolicy sizeAdjustPolicy() const
void setSizeAdjustPolicy(QAbstractScrollArea::SizeAdjustPolicy policy)

verticalScrollBarPolicy : Qt::ScrollBarPolicy

Это свойство содержит политику для вертикального ползунка прокрутки

Политика по умолчанию — Qt::ScrollBarAsNeeded.

Функции доступа:

Qt::ScrollBarPolicy verticalScrollBarPolicy() const
void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy)

См. также horizontalScrollBarPolicy.

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

QAbstractScrollArea::QAbstractScrollArea(QWidget *parent = nullptr)

Создает viewport.

Аргумент parent передается в конструктор QWidget.

[virtual] QAbstractScrollArea::~QAbstractScrollArea()

Удаляет viewport.

void QAbstractScrollArea::addScrollBarWidget(QWidget *widget, Qt::Alignment alignment)

Добавляет widget как виджет ползунка прокрутки в указанном месте alignment.

Виджеты ползунков прокрутки отображаются рядом с горизонтальным или вертикальным ползунком и могут располагаться по обе стороны от него. Если вы хотите, чтобы виджеты ползунков всегда отображались, установите scrollBarPolicy для соответствующего ползунка в AlwaysOn.

alignment должен быть одним из Qt::AlignLeft и Qt::AlignRight, что соответствует горизонтальному ползунку, или Qt::AlignTop и Qt::AlignBottom, что соответствует вертикальному ползунку.

Виджет ползунка прокрутки можно удалить, переместив родительский виджет или удалив его. Также можно скрыть виджет с помощью QWidget::hide()

Виджет ползунка прокрутки будет изменён для соответствия геометрии ползунка для текущего стиля. Следующее описывает случай для виджетов ползунков на горизонтальном ползунке:

Высота виджета будет установлена для соответствия высоте ползунка. Для управления шириной виджета используйте QWidget::setMinimumWidth и QWidget::setMaximumWidth или реализуйте QWidget::sizeHint() и установите горизонтальную политику размера. Если вам нужен квадратный виджет, вызовите QStyle::pixelMetric(QStyle::PM_ScrollBarExtent) и установите ширину на это значение.

См. также scrollBarWidgets().

[override virtual protected] void QAbstractScrollArea::contextMenuEvent(QContextMenuEvent *e)

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

Этот обработчик событий можно переопределить в подклассе, чтобы получать события контекстного меню для виджета viewport(). Событие передаётся в e.

См. также QWidget::contextMenuEvent().

QWidget *QAbstractScrollArea::cornerWidget() const

Возвращает виджет в углу между двумя полосами прокрутки.

По умолчанию виджет в углу отсутствует.

См. также setCornerWidget().

[override virtual protected] void QAbstractScrollArea::dragEnterEvent(QDragEnterEvent *event)

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

Этот обработчик событий можно переопределить в подклассе, чтобы получать события ввода перетаскивания (передаваемые в event) для виджета viewport().

См. также QWidget::dragEnterEvent().

[override virtual protected] void QAbstractScrollArea::dragLeaveEvent(QDragLeaveEvent *event)

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

Этот обработчик событий можно переопределить в подклассе, чтобы получать события выхода при перетаскивании (передаваемые в event) для виджета viewport().

См. также QWidget::dragLeaveEvent().

[override virtual protected] void QAbstractScrollArea::dragMoveEvent(QDragMoveEvent *event)

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

Этот обработчик событий можно переопределить в подклассе, чтобы получать события перемещения при перетаскивании (передаваемые в event) для виджета viewport().

См. также QWidget::dragMoveEvent().

[override virtual protected] void QAbstractScrollArea::dropEvent(QDropEvent *event)

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

Этот обработчик событий можно переопределить в подклассе, чтобы получать события опускания (передаваемые в event) для виджета viewport().

См. также QWidget::dropEvent().

[override virtual protected] bool QAbstractScrollArea::event(QEvent *event)

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

Это основной обработчик событий для виджета QAbstractScrollArea (а не области прокрутки viewport()). Указанное событие event — это общий объект события, который может потребоваться привести к нужному классу в зависимости от его типа.

См. также QEvent::type().

QScrollBar *QAbstractScrollArea::horizontalScrollBar() const

Возвращает горизонтальную полосу прокрутки.

См. также setHorizontalScrollBar(), horizontalScrollBarPolicy и verticalScrollBar().

[override virtual protected] void QAbstractScrollArea::keyPressEvent(QKeyEvent *e)

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

Эта функция вызывается с событием нажатия клавиши e при нажатии клавиш. Она обрабатывает PageUp, PageDown, Up, Down, Left и Right, игнорируя все остальные нажатия клавиш.

QSize QAbstractScrollArea::maximumViewportSize() const

Возвращает размер области просмотра, как если бы полосы прокрутки не имели допустимого диапазона прокрутки.

[override virtual] QSize QAbstractScrollArea::minimumSizeHint() const

Переопределяет функцию доступа к свойству: QWidget::minimumSizeHint.

[override virtual protected] void QAbstractScrollArea::mouseDoubleClickEvent(QMouseEvent *e)

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

Этот обработчик событий можно переопределить в подклассе, чтобы получать события двойного щелчка мыши для виджета viewport(). Событие передаётся в e.

См. также QWidget::mouseDoubleClickEvent().

[override virtual protected] void QAbstractScrollArea::mouseMoveEvent(QMouseEvent *e)

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

Этот обработчик событий можно переопределить в подклассе, чтобы получать события перемещения мыши для виджета viewport(). Событие передаётся в e.

См. также QWidget::mouseMoveEvent().

[override virtual protected] void QAbstractScrollArea::mousePressEvent(QMouseEvent *e)

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

Этот обработчик событий можно переопределить в подклассе, чтобы получать события нажатия мыши для виджета viewport(). Событие передаётся в e.

По умолчанию вызывается QWidget::mousePressEvent() для стандартной обработки всплывающих окон.

См. также QWidget::mousePressEvent().

[override virtual protected] void QAbstractScrollArea::mouseReleaseEvent(QMouseEvent *e)

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

Этот обработчик событий можно переопределить в подклассе, чтобы получать события отпускания нажатия мыши для виджета viewport(). Событие передаётся в e.

См. также QWidget::mouseReleaseEvent().

[override virtual protected] void QAbstractScrollArea::paintEvent(QPaintEvent *event)

Переопределяет: QFrame::paintEvent(QPaintEvent *).

Этот обработчик событий можно переопределить в подклассе, чтобы получать события рисования (передаваемые в event) для виджета viewport().

Примечание: Если вы открываете рисовальщик, убедитесь, что он открыт для viewport().

См. также QWidget::paintEvent().

[override virtual protected] void QAbstractScrollArea::resizeEvent(QResizeEvent *event)

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

Этот обработчик событий можно переопределить в подклассе, чтобы получать события изменения размера (передаваемые в event) для виджета viewport().

Когда вызывается resizeEvent(), геометрия области просмотра уже обновлена: её новый размер доступен через функцию QResizeEvent::size(), а старый размер — через QResizeEvent::oldSize().

См. также QWidget::resizeEvent().

QWidgetList QAbstractScrollArea::scrollBarWidgets(Qt::Alignment alignment)

Возвращает список текущих виджетов полос прокрутки. alignment может быть любой комбинацией четырёх флагов расположения.

См. также addScrollBarWidget().

[virtual protected] void QAbstractScrollArea::scrollContentsBy(int dx, int dy)

Этот виртуальный обработчик вызывается при перемещении полос прокрутки на dx, dy, и, следовательно, содержимое области просмотра должно быть прокручено соответствующим образом.

По умолчанию вызывается update() для всей области viewport(), подклассы могут переопределить этот обработчик для оптимизации или, например, как QScrollArea, для перемещения виджета содержимого. Параметры dx и dy предназначены для удобства, чтобы класс знал, на сколько нужно прокрутить (полезно, например, при сдвигах пикселей). Вы можете игнорировать эти значения и прокручивать напрямую до позиции, указанной полосами прокрутки.

Вызов этой функции для программируемой прокрутки является ошибкой, используйте полосы прокрутки вместо этого (например, вызвав QScrollBar::setValue() напрямую).

void QAbstractScrollArea::setCornerWidget(QWidget *widget)

Устанавливает виджет в углу между двумя полосами прокрутки в widget.

Вероятно, вы также захотите установить хотя бы один из режимов полосы прокрутки в AlwaysOn.

Передача nullptr отображает виджет в углу.

Любой предыдущий виджет в углу скрывается.

Вы можете вызывать setCornerWidget() с одним и тем же виджетом в разное время.

Все виджеты, установленные здесь, будут удалены областью прокрутки при её уничтожении, если вы не переместите виджет в родительскую область после установки другого виджета в угол (или nullptr).

Любой новый установленный виджет не должен иметь текущего родителя.

По умолчанию виджет угла отсутствует.

См. также cornerWidget(), horizontalScrollBarPolicy и horizontalScrollBarPolicy.

void QAbstractScrollArea::setHorizontalScrollBar(QScrollBar *scrollBar)

Заменяет существующую горизонтальную полосу прокрутки на scrollBar и устанавливает все свойства ползунка бывшей полосы прокрутки на новую полосу прокрутки. Бывшая полоса прокрутки затем удаляется.

QAbstractScrollArea уже предоставляет горизонтальные и вертикальные полосы прокрутки по умолчанию. Вы можете вызвать эту функцию, чтобы заменить стандартную горизонтальную полосу прокрутки своей собственной настраиваемой полосой прокрутки.

См. также horizontalScrollBar() и setVerticalScrollBar().

void QAbstractScrollArea::setVerticalScrollBar(QScrollBar *scrollBar)

Заменяет существующую вертикальную полосу прокрутки на scrollBar и устанавливает все свойства ползунка бывшей полосы прокрутки на новую полосу прокрутки. Бывшая полоса прокрутки затем удаляется.

QAbstractScrollArea уже предоставляет вертикальные и горизонтальные полосы прокрутки по умолчанию. Вы можете вызвать эту функцию, чтобы заменить стандартную вертикальную полосу прокрутки своей собственной настраиваемой полосой прокрутки.

См. также verticalScrollBar() и setHorizontalScrollBar().

void QAbstractScrollArea::setViewport(QWidget *widget)

Устанавливает область прокрутки в качестве данного widget. QAbstractScrollArea возьмет на себя управление данным widget.

Если widget равен nullptr, QAbstractScrollArea назначит новый экземпляр QWidget для области прокрутки.

См. также viewport().

[protected] void QAbstractScrollArea::setViewportMargins(int left, int top, int right, int bottom)

Устанавливает отступы вокруг области прокрутки до left, top, right и bottom. Это полезно для приложений, таких как электронные таблицы с "закреплёнными" строками и столбцами. Отступы оставляются пустыми; поместите виджеты в неиспользуемые области.

Обратите внимание, что эта функция часто вызывается QTreeView и QTableView, поэтому отступы должны быть реализованы подклассами QAbstractScrollArea. Кроме того, если подклассы должны использоваться в представлениях элементов, они не должны вызывать эту функцию.

По умолчанию все отступы равны нулю.

См. также viewportMargins().

[protected] void QAbstractScrollArea::setViewportMargins(const QMargins &margins)

Устанавливает отступы margins вокруг области прокрутки. Это полезно для приложений, таких как электронные таблицы с "закреплёнными" строками и столбцами. Отступы оставляются пустыми; поместите виджеты в неиспользуемые области.

По умолчанию все отступы равны нулю.

См. также viewportMargins().

[virtual] void QAbstractScrollArea::setupViewport(QWidget *viewport)

Этот слот вызывается QAbstractScrollArea после вызова setViewport(viewport). Переопределите эту функцию в подклассе QAbstractScrollArea, чтобы инициализировать новую область прокрутки viewport перед её использованием.

См. также setViewport().

[override virtual] QSize QAbstractScrollArea::sizeHint() const

Переопределяет: QFrame::sizeHint() const.

Возвращает свойство sizeHint области прокрутки. Размер определяется с помощью viewportSizeHint() плюс некоторое дополнительное пространство для полос прокрутки, если необходимо.

QScrollBar *QAbstractScrollArea::verticalScrollBar() const

Возвращает вертикальную полосу прокрутки.

См. также setVerticalScrollBar(), verticalScrollBarPolicy и horizontalScrollBar().

QWidget *QAbstractScrollArea::viewport() const

Возвращает виджет области прокрутки.

Используйте функцию QScrollArea::widget(), чтобы получить содержимое виджета области прокрутки.

См. также setViewport() и QScrollArea::widget().

[virtual protected] bool QAbstractScrollArea::viewportEvent(QEvent *event)

Основной обработчик событий для области прокрутки (виджета viewport() ). Обрабатывает указанное событие event и может вызываться подклассами для обеспечения разумного поведения по умолчанию.

Возвращает true для указания системе событий, что событие обработано и больше не требует обработки; в противном случае возвращает false для указания, что событие должно быть распространено дальше.

Вы можете переопределить эту функцию в подклассе, но мы рекомендуем использовать один из специализированных обработчиков событий вместо этого.

Специализированные обработчики событий области прокрутки: paintEvent(), mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), wheelEvent(), dragEnterEvent(), dragMoveEvent(), dragLeaveEvent(), dropEvent(), contextMenuEvent() и resizeEvent().

[protected, since 5.5] QMargins QAbstractScrollArea::viewportMargins() const

Возвращает отступы вокруг области прокрутки. По умолчанию все отступы равны нулю.

Функция была добавлена в Qt 5.5.

См. также setViewportMargins().

[virtual protected, since 5.2] QSize QAbstractScrollArea::viewportSizeHint() const

Возвращает рекомендуемый размер области прокрутки. Стандартная реализация возвращает viewport()->sizeHint(). Обратите внимание, что размер — это просто размер области прокрутки без видимых полос прокрутки.

Функция была добавлена в Qt 5.2.

[override virtual protected] void QAbstractScrollArea::wheelEvent(QWheelEvent *e)

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

Этот обработчик событий может быть переопределён в подклассе для получения событий прокрутки для виджета viewport() . Событие передаётся в e.

См. также QWidget::wheelEvent().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qabstractscrollarea.html

Spec-Zone.ru

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