QScrollArea Class
QScrollArea クラスは、別のウィジェットをスクロール表示するためのビューを提供します。詳細...
| ヘッダー: | #include <QScrollArea> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) 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);上記のコードは、画像ラベルを含むスクロール領域(下の画像を参照)を作成します。画像を拡大・縮小すると、スクロール領域は必要なスクロールバーを表示します:
![]() | ![]() | ![]() |
スクロールバーの外観は、現在設定されている `scroll bar policies` によって決まります。`QAbstractScrollArea` から継承された機能を使用して、スクロールバーの外観を制御できます。
たとえば、QAbstractScrollArea::horizontalScrollBarPolicy およびQAbstractScrollArea::verticalScrollBarPolicy プロパティを設定できます。あるいは、スクロール領域の内容が変更された際にスクロールバーを動的に調整したい場合は、horizontalScrollBar()およびverticalScrollBar()関数(これらを使用するとスクロールバーにアクセスできます)を利用し、QScrollBar::setValue()関数を使用して、スクロール領域の内容が変更されるたびにスクロールバーの値を設定することができます。
widget() 関数を使用して、子ウィジェットを取得できます。setWidgetResizable() 関数を使用すると、ビューのサイズ変更を可能にできます。ウィジェットの配置は、setAlignment() で指定できます。
ensureVisible() およびensureWidgetVisible() という 2 つの便利関数を使用すると、必要に応じてコンテンツをスクロールさせ、ビューポート内でコンテンツの特定の領域が確実に表示されるようにすることができます。
サイズのヒントとレイアウト
スクロール領域を使用してカスタムウィジェットのコンテンツを表示する場合、子ウィジェットの `size hint ` が適切な値に設定されていることを確認することが重要です。子ウィジェットに標準の `QWidget ` を使用している場合、ウィジェットのコンテンツがスクロール領域内で正しく表示されるようにするために、`QWidget::setMinimumSize()` を呼び出す必要がある場合があります。
レイアウト内に配置された子ウィジェットを含むウィジェットのコンテンツをスクロール領域で表示する場合、レイアウトのサイズポリシーもウィジェットのサイズを決定する要因となることを理解しておくことが重要です。これは、レイアウトのコンテンツを動的に変更しようとする場合に特に知っておくと役立ちます。 そのような場合、レイアウトの `size constraint ` プロパティを、レイアウトの最小サイズおよび/または最大サイズに制約を設ける値(例:`QLayout::SetMinAndMaxSize`)に設定すると、レイアウトの内容が変更されるたびにスクロール領域のサイズが更新されるようになります。
「 QAbstractScrollArea 」および「QScrollBar 」も参照してください 。
プロパティのドキュメント
alignment : Qt::Alignment
このプロパティは、スクロール領域のウィジェットの配置を保持します
有効な配置は、以下のフラグの組み合わせです:
Qt::AlignLeftQt::AlignHCenterQt::AlignRightQt::AlignTopQt::AlignVCenterQt::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)
(x 、y )の座標が、xmargin およびymargin でピクセル単位で指定されたマージンを持つビューポートの領域内に表示されるように、スクロール領域の内容をスクロールします。指定された座標に到達できない場合、内容は最も近い有効な位置までスクロールされます。両方のマージンのデフォルト値は 50 ピクセルです。
void QScrollArea::ensureWidgetVisible(QWidget *childWidget, int xmargin = 50, int ymargin = 50)
QScrollArea::widget() のchildWidget が、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 のレイアウトを追加しておく必要があることに注意してください。後で追加した場合、スクロール領域をshow()したタイミングに関係なく、widget は表示されません。この場合、後で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()も参照してください 。
© 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.


