Auf dieser Seite

QScrollArea Class

Die Klasse „QScrollArea“ bietet eine scrollbare Ansicht eines anderen Widgets. Mehr...

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

Eigenschaften

Öffentliche Funktionen

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

Neu implementierte öffentliche Funktionen

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

Neu implementierte geschützte Funktionen

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

Ausführliche Beschreibung

Ein Bildlaufbereich dient dazu, den Inhalt eines untergeordneten Widgets innerhalb eines Rahmens anzuzeigen. Wenn das Widget die Größe des Rahmens überschreitet, kann die Ansicht Bildlaufleisten bereitstellen, sodass der gesamte Bereich des untergeordneten Widgets angezeigt werden kann. Das untergeordnete Widget muss mit ` setWidget()` angegeben werden. Beispiel:

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

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

Der obige Code erstellt einen Bildlaufbereich (siehe Abbildungen unten), der ein Bildlabel enthält. Beim Skalieren des Bildes kann der Bildlaufbereich die erforderlichen Bildlaufleisten bereitstellen:

Bild ohne BildlaufleisteBild mit einer horizontalen BildlaufleisteBild mit einer horizontalen und einer vertikalen Bildlaufleiste

Das Erscheinungsbild der Bildlaufleisten hängt von der aktuell festgelegten Eigenschaft ` scroll bar policies` ab. Sie können das Erscheinungsbild der Bildlaufleisten mithilfe der von ` QAbstractScrollArea` geerbten Funktionalität steuern.

Beispielsweise können Sie die Eigenschaften ` QAbstractScrollArea::horizontalScrollBarPolicy ` und ` QAbstractScrollArea::verticalScrollBarPolicy ` festlegen. Wenn Sie möchten, dass sich die Bildlaufleisten dynamisch anpassen, sobald sich der Inhalt des Bildlaufbereichs ändert, können Sie die Funktionen ` horizontalScrollBar()` und ` verticalScrollBar()` verwenden (die Ihnen den Zugriff auf die Bildlaufleisten ermöglichen) und die Werte der Bildlaufleisten bei jeder Änderung des Inhalts des Bildlaufbereichs mithilfe der Funktion ` QScrollBar::setValue()` festlegen.

Sie können das untergeordnete Widget mit der Funktion ` widget()` abrufen. Die Ansicht lässt sich mit der Funktion ` setWidgetResizable()` in der Größe anpassen. Die Ausrichtung des Widgets kann mit ` setAlignment()` festgelegt werden.

Zwei Hilfsfunktionen, „ ensureVisible()“ und „ ensureWidgetVisible()“, stellen sicher, dass ein bestimmter Bereich des Inhalts innerhalb des Ansichtsbereichs sichtbar ist, indem der Inhalt bei Bedarf gescrollt wird.

Größenhinweise und Layouts

Bei der Verwendung eines Scrollbereichs zur Anzeige des Inhalts eines benutzerdefinierten Widgets ist es wichtig, sicherzustellen, dass die Eigenschaft „ size hint “ des untergeordneten Widgets auf einen geeigneten Wert gesetzt ist. Wird für das untergeordnete Widget ein Standard- QWidget verwendet, kann es erforderlich sein, die Funktion ` QWidget::setMinimumSize()` aufzurufen, um sicherzustellen, dass der Inhalt des Widgets innerhalb des Scrollbereichs korrekt angezeigt wird.

Wird ein Scrollbereich verwendet, um den Inhalt eines Widgets anzuzeigen, das in einem Layout angeordnete untergeordnete Widgets enthält, ist zu beachten, dass die Größenrichtlinie des Layouts auch die Größe des Widgets bestimmt. Dies ist besonders wichtig zu wissen, wenn Sie beabsichtigen, den Inhalt des Layouts dynamisch zu ändern. In solchen Fällen führt die Einstellung der Eigenschaft ` size constraint ` des Layouts auf einen Wert, der Einschränkungen für die minimale und/oder maximale Größe des Layouts vorsieht (z. B. ` QLayout::SetMinAndMaxSize`), dazu, dass die Größe des Bildlaufbereichs aktualisiert wird, sobald sich der Inhalt des Layouts ändert.

Siehe auch „ QAbstractScrollArea “ und „ QScrollBar “.

Dokumentation zur Eigenschaft

alignment : Qt::Alignment

Diese Eigenschaft legt die Ausrichtung des Widgets des Bildlaufbereichs fest

Eine gültige Ausrichtung ist eine Kombination aus den folgenden Flags:

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

Standardmäßig bleibt das Widget an der oberen linken Ecke des Scrollbereichs verankert.

Zugriffsfunktionen:

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

widgetResizable : bool

Diese Eigenschaft legt fest, ob der Scrollbereich die Größe des Ansichts-Widgets anpassen soll

Ist diese Eigenschaft auf „false“ gesetzt (Standardeinstellung), passt sich der Bildlaufbereich an die Größe seines Widgets an. Unabhängig von dieser Eigenschaft können Sie die Größe des Widgets programmgesteuert mit widget()->resize() ändern, woraufhin sich der Bildlaufbereich automatisch an die neue Größe anpasst.

Ist diese Eigenschaft auf „true“ gesetzt, passt der Bildlaufbereich die Größe des Widgets automatisch an, um Bildlaufleisten zu vermeiden, wo dies möglich ist, oder um zusätzlichen Platz zu nutzen.

Zugriffsfunktionen:

bool widgetResizable() const
void setWidgetResizable(bool resizable)

Dokumentation zu Mitgliedsfunktionen

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

Erstellt einen leeren Bildlaufbereich mit der angegebenen „ parent “.

Siehe auch ` setWidget()` .

[virtual noexcept] QScrollArea::~QScrollArea()

Löscht den Scrollbereich und dessen untergeordnetes Widget.

Siehe auch ` setWidget()`.

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

Blättert den Inhalt des Bildlaufbereichs so, dass der Punkt (x, y) innerhalb des Sichtbereichs sichtbar ist, dessen Ränder in Pixeln durch xmargin und ymargin festgelegt sind. Kann der angegebene Punkt nicht erreicht werden, wird der Inhalt zur nächstgelegenen gültigen Position geblättert. Der Standardwert für beide Ränder beträgt 50 Pixel.

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

Blättert den Inhalt des Bildlaufbereichs so, dass die Koordinate ` childWidget ` von ` QScrollArea::widget()` innerhalb des Darstellungsbereichs sichtbar ist, wobei die Ränder in Pixeln durch ` xmargin ` und ` ymargin` festgelegt werden. Kann der angegebene Punkt nicht erreicht werden, wird der Inhalt zur nächstgelegenen gültigen Position geblättert. Der Standardwert für beide Ränder beträgt 50 Pixel.

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

Umsetzt: ` QAbstractScrollArea::event(QEvent *event)`.

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

Implementiert: ` QObject::eventFilter` (`QObject *watched, QEvent *event`).

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

Implementiert: ` QWidget::focusNextPrevChild` (bool next).

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

Implementiert: ` QAbstractScrollArea::resizeEvent(QResizeEvent *event)`.

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

Implementiert: ` QAbstractScrollArea::scrollContentsBy(int dx, int dy)`.

void QScrollArea::setWidget(QWidget *widget)

Legt die „ widget “ des Bildlaufbereichs fest.

Das „ widget “ wird zu einem untergeordneten Element des Scrollbereichs und wird zerstört, wenn der Scrollbereich gelöscht wird oder wenn ein neues Widget festgelegt wird.

Die Eigenschaft „ autoFillBackground “ des Widgets wird auf „ true “ gesetzt.

Wenn der Scrollbereich zum Zeitpunkt des Hinzufügens von „ widget “ sichtbar ist, müssen Sie ihn explizit mit „ show()“ ausblenden.

Beachten Sie: Sie müssen das Layout von ` widget ` hinzufügen, bevor Sie diese Funktion aufrufen; wenn Sie es später hinzufügen, ist der ` widget ` nicht sichtbar – unabhängig davon, wann Sie den Scrollbereich mit ` show()` anzeigen. In diesem Fall können Sie den ` widget ` später auch nicht mit ` show()` anzeigen.

Siehe auch ` widget()`.

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

Implementiert: ` QAbstractScrollArea::sizeHint()` const.

QWidget *QScrollArea::takeWidget()

Entfernt das Widget aus dem Bildlaufbereich und überträgt die Eigentumsrechte an dem Widget an den Aufrufer.

Siehe auch ` widget()`.

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

Implementiert: ` QAbstractScrollArea::viewportSizeHint()` const.

QWidget *QScrollArea::widget() const

Gibt das Widget des Scrollbereichs zurück oder „ nullptr “, falls kein Widget vorhanden ist.

Siehe auch 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.