QScrollArea Class

QScrollArea クラスは、別のウィジェットにスクロールするビューを提供します。詳細...

ヘッダ #include <QScrollArea>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
継承: QAbstractScrollArea

プロパティ

パブリック関数

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);

上のコードは、画像ラベルを含むスクロール・エリア(下の画像に示す)を作成します。画像を拡大縮小するとき、スクロール・エリアは必要なスクロール・バーを提供することができます:

スクロールバーの外観は、現在設定されているscroll bar policies に依存します。スクロールバーの外観は、QAbstractScrollArea から継承された機能を使用して制御できます。

たとえば、QAbstractScrollArea::horizontalScrollBarPolicyQAbstractScrollArea::verticalScrollBarPolicy プロパティを設定できます。また、スクロール・エリアの内容が変更されたときにスクロール・バーを動的に調整したい場合は、horizontalScrollBar() およびverticalScrollBar() 関数(スクロール・バーにアクセスできる)を使用し、QScrollBar::setValue() 関数を使用して、スクロール・エリアの内容が変更されるたびにスクロール・バーの値を設定できます。

子ウィジェットは、widget() 関数を使用して取得できます。setWidgetResizable() 関数を使用して、ビューのサイズを変更できます。ウィジェットの配置は、setAlignment() で指定できます。

2つの便利な関数ensureVisible() とensureWidgetVisible() は、必要に応じてコンテンツをスクロールすることにより、コンテンツの特定の領域がビューポート内に表示されるようにします。

サイズのヒントとレイアウト

カスタムウィジェットのコンテンツを表示するためにスクロールエリアを使用する場合、子ウィジェットのsize hint が適切な値に設定されていることを確認することが重要です。子ウィジェットに標準のQWidget を使用する場合、ウィジェットの内容がスクロール・エリア内に正しく表示されるように、QWidget::setMinimumSize() を呼び出す必要があるかもしれません。

レイアウトに配置された子ウィジェットを含むウィジェットの内容を表示するためにスクロール・エリアを使用する場合、レイアウトのサイズ・ポリシーがウィジェットのサイズも決定することを理解することが重要です。これは、レイアウトの内容を動的に変更する場合に特に役立ちます。このような場合、レイアウトのsize constraint プロパティを、レイアウトの最小および/または最大サイズに制約を与えるもの(例えば、QLayout::SetMinAndMaxSize )に設定すると、レイアウトの内容が変更されるたびにスクロール領域のサイズが更新されます。

QAbstractScrollAreaQScrollBarも参照してください

プロパティ・ドキュメント

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)

メンバー関数ドキュメント

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

空のスクロール領域を、与えられたparent で構築します。

setWidget()も参照

[virtual noexcept] QScrollArea::~QScrollArea()

スクロールエリアとその子ウィジェットを破棄します。

setWidget()も参照してください

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

xmarginymargin によってピクセル単位で指定されたマージンを持つビューポートの領域内に点 (x,y) が見えるように、スクロール領域の内容をスクロールする。 指定された点に到達できない場合、内容は最も近い有効な位置にスクロールされる。両方のマージンのデフォルト値は50ピクセルである。

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

xmarginymargin でピクセル単位で指定されたマージンで、QScrollArea::widget() のchildWidget がビューポート内に表示されるように、スクロール領域のコンテンツをスクロールする。 指定されたポイントに到達できない場合、コンテンツは最も近い有効な位置にスクロールされる。両方のマージンのデフォルト値は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() するタイミングに関係なく、表示されません。widget この場合、show() を後で追加することもできません。

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()も参照してください

© 2025 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.