QScrollArea Class

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

Header: #include <QScrollArea>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Inherits: 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も参照してください

プロパティ Documentation

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)

再リンプルメント: (QObject *watched, QEvent *event):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()も参照して ください。

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。