En esta página

QScrollArea Class

La clase QScrollArea proporciona una vista de desplazamiento sobre otro widget. Más...

Cabecera: #include <QScrollArea>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Hereda: QAbstractScrollArea

Propiedades

Funciones públicas

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

Funciones públicas reimplementadas

virtual bool focusNextPrevChild(bool next) override
virtual QSize sizeHint() const override

Funciones protegidas reimplementadas

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

Descripción detallada

Un área de desplazamiento se utiliza para mostrar el contenido de un widget hijo dentro de un marco. Si el widget excede el tamaño del marco, la vista puede proporcionar barras de desplazamiento para que se pueda ver toda el área del widget hijo. El widget hijo debe especificarse con setWidget(). Por ejemplo:

QLabel *imageLabel = new QLabel;
QImage image("happyguy.png");
imageLabel->setPixmap(QPixmap::fromImage(image));

scrollArea = new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);

El código anterior crea un área de desplazamiento (que se muestra en las imágenes de abajo) que contiene una etiqueta de imagen. Al escalar la imagen, el área de desplazamiento puede proporcionar las barras de desplazamiento necesarias:

Imagen sin barra de desplazamientoImagen con barra de desplazamiento horizontalImagen con barra de desplazamiento horizontal y vertical

El aspecto de las barras de desplazamiento depende de la configuración actual de scroll bar policies. Puede controlar el aspecto de las barras de desplazamiento utilizando la funcionalidad heredada de QAbstractScrollArea.

Por ejemplo, puede configurar las propiedades QAbstractScrollArea::horizontalScrollBarPolicy y QAbstractScrollArea::verticalScrollBarPolicy. O si desea que las barras de desplazamiento se ajusten dinámicamente cuando cambie el contenido del área de desplazamiento, puede utilizar las funciones horizontalScrollBar() y verticalScrollBar() (que le permiten acceder a las barras de desplazamiento) y establecer los valores de las barras de desplazamiento cada vez que cambie el contenido del área de desplazamiento, utilizando la función QScrollBar::setValue().

La función widget() permite recuperar el widget hijo. La vista puede cambiar de tamaño con la función setWidgetResizable(). La alineación del widget puede especificarse con setAlignment().

Dos funciones prácticas ensureVisible() y ensureWidgetVisible() garantizan que una determinada región del contenido sea visible dentro de la ventana gráfica, desplazando el contenido si es necesario.

Sugerencias de tamaño y disposición

Cuando se utiliza un área de desplazamiento para mostrar el contenido de un widget personalizado, es importante asegurarse de que el size hint del widget hijo está ajustado a un valor adecuado. Si se utiliza un QWidget estándar para el widget hijo, puede ser necesario llamar a QWidget::setMinimumSize() para asegurarse de que el contenido del widget se muestra correctamente dentro del área de desplazamiento.

Si se utiliza un área de desplazamiento para mostrar el contenido de un widget que contiene widgets hijos dispuestos en un diseño, es importante saber que la política de tamaño del diseño también determinará el tamaño del widget. Esto es especialmente útil si pretende cambiar dinámicamente el contenido del diseño. En tales casos, si se define la propiedad size constraint del diseño como una propiedad que limita el tamaño mínimo y/o máximo del diseño (por ejemplo, QLayout::SetMinAndMaxSize), el tamaño del área de desplazamiento se actualizará cada vez que cambie el contenido del diseño.

Véase también QAbstractScrollArea y QScrollBar.

Documentación de propiedades

alignment : Qt::Alignment

Esta propiedad contiene la alineación del widget del área de desplazamiento.

Una alineación válida es una combinación de las siguientes banderas:

  • Qt::AlignLeft
  • Qt::AlignHCenter
  • Qt::AlignRight
  • Qt::AlignTop
  • Qt::AlignVCenter
  • Qt::AlignBottom

Por defecto, el widget se sitúa en la esquina superior izquierda del área de desplazamiento.

Funciones de acceso:

Qt::Alignment alignment() const
void setAlignment(Qt::Alignment)

widgetResizable : bool

Esta propiedad indica si el área de desplazamiento debe cambiar el tamaño del widget de la vista.

Si esta propiedad está establecida a false (por defecto), el área de desplazamiento respeta el tamaño de su widget. Independientemente de esta propiedad, puede redimensionar el widget mediante programación utilizando widget()->resize(), y el área de desplazamiento se ajustará automáticamente al nuevo tamaño.

Si esta propiedad está establecida a true, el área de desplazamiento redimensionará automáticamente el widget para evitar las barras de desplazamiento donde puedan evitarse, o para aprovechar el espacio extra.

Funciones de acceso:

bool widgetResizable() const
void setWidgetResizable(bool resizable)

Documentación de funciones miembro

[explicit] QScrollArea::QScrollArea(QWidget *parent = nullptr)

Construye un área de desplazamiento vacía con la dirección parent.

Véase también setWidget().

[virtual noexcept] QScrollArea::~QScrollArea()

Destruye el área de desplazamiento y su widget hijo.

Véase también setWidget().

void QScrollArea::ensureVisible(int x, int y, int xmargin = 50, int ymargin = 50)

Desplaza el contenido del área de desplazamiento de forma que el punto (x, y) sea visible dentro de la región de la ventana gráfica con los márgenes especificados en píxeles por xmargin y ymargin. Si no se puede alcanzar el punto especificado, el contenido se desplaza hasta la posición válida más cercana. El valor por defecto para ambos márgenes es de 50 píxeles.

void QScrollArea::ensureWidgetVisible(QWidget *childWidget, int xmargin = 50, int ymargin = 50)

Desplaza el contenido del área de desplazamiento de forma que childWidget de QScrollArea::widget() sea visible dentro de la ventana gráfica con los márgenes especificados en píxeles por xmargin y ymargin. Si no se puede alcanzar el punto especificado, el contenido se desplaza hasta la posición válida más cercana. El valor por defecto para ambos márgenes es de 50 píxeles.

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

Reimplementa: QAbstractScrollArea::event(QEvent *event).

[override virtual protected] bool QScrollArea::eventFilter(QObject *o, QEvent *e)

Reimplementa: QObject::eventFilter(QObject *watched, QEvent *event).

[override virtual] bool QScrollArea::focusNextPrevChild(bool next)

Reimplementa: QWidget::focusNextPrevChild(bool next).

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

Reimplementa: QAbstractScrollArea::resizeEvent(QResizeEvent *event).

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

Reimplementa: QAbstractScrollArea::scrollContentsBy(int dx, int dy).

void QScrollArea::setWidget(QWidget *widget)

Establece el área de desplazamiento widget.

widget se convierte en hijo del área de desplazamiento y se destruirá cuando se elimine el área de desplazamiento o cuando se establezca un nuevo widget.

La propiedad autoFillBackground del widget se establecerá en true.

Si el área de desplazamiento es visible cuando se añade el widget, debe show() explícitamente.

Tenga en cuenta que debe añadir el diseño de widget antes de llamar a esta función; si lo añade más tarde, el widget no será visible - independientemente de cuándo show() el área de desplazamiento. En este caso, tampoco podrá show() el widget más tarde.

Véase también widget().

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

Reimplementa: QAbstractScrollArea::sizeHint() const.

QWidget *QScrollArea::takeWidget()

Elimina el widget del área de desplazamiento, y pasa la propiedad del widget a la persona que llama.

Véase también widget().

[override virtual protected] QSize QScrollArea::viewportSizeHint() const

Reimplementa: QAbstractScrollArea::viewportSizeHint() const.

QWidget *QScrollArea::widget() const

Devuelve el widget del área de desplazamiento, o nullptr si no hay ninguno.

Véase también setWidget().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.