このページでは

QStackedLayout Class

QStackedLayout クラスは、一度に 1 つのウィジェットのみが表示されるウィジェットのスタックを提供します。詳細...

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

パブリック型

enum StackingMode { StackOne, StackAll }

プロパティ

パブリック関数

QStackedLayout()
QStackedLayout(QLayout *parentLayout)
QStackedLayout(QWidget *parent)
virtual ~QStackedLayout()
int addWidget(QWidget *widget)
int currentIndex() const
QWidget *currentWidget() const
int insertWidget(int index, QWidget *widget)
void setStackingMode(QStackedLayout::StackingMode stackingMode)
QStackedLayout::StackingMode stackingMode() const
QWidget *widget(int index) const

再実装されたパブリック関数

virtual void addItem(QLayoutItem *item) override
virtual int count() const override
virtual bool hasHeightForWidth() const override
virtual int heightForWidth(int width) const override
virtual QLayoutItem *itemAt(int index) const override
virtual QSize minimumSize() const override
virtual void setGeometry(const QRect &rect) override
virtual QSize sizeHint() const override
virtual QLayoutItem *takeAt(int index) override

パブリック・スロット

void setCurrentIndex(int index)
void setCurrentWidget(QWidget *widget)

シグナル

void currentChanged(int index)
(since 6.9) void widgetAdded(int index)
void widgetRemoved(int index)

詳細な説明

QStackedLayout を使用すると、QTabWidget が提供するものと類似したユーザーインターフェースを作成できます。また、QStackedLayout を基盤として構築された便利なQStackedWidget クラスも用意されています。

QStackedLayoutには、複数の子ウィジェット(「ページ」)を配置することができます。例えば:

QWidget *firstPageWidget = new QWidget;
QWidget *secondPageWidget = new QWidget;
QWidget *thirdPageWidget = new QWidget;

QStackedLayout *stackedLayout = new QStackedLayout;
stackedLayout->addWidget(firstPageWidget);
stackedLayout->addWidget(secondPageWidget);
stackedLayout->addWidget(thirdPageWidget);

QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(stackedLayout);
setLayout(mainLayout);

QStackedLayoutには、ユーザーがページを切り替えるための固有の機能は備わっていません。通常、これはQComboBox や、QStackedLayoutのページのタイトルを格納するQListWidget を通じて行われます。例えば:

QComboBox *pageComboBox = new QComboBox;
pageComboBox->addItem(tr("Page 1"));
pageComboBox->addItem(tr("Page 2"));
pageComboBox->addItem(tr("Page 3"));
connect(pageComboBox, &QComboBox::activated,
        stackedLayout, &QStackedLayout::setCurrentIndex);

レイアウトにウィジェットを追加する際、ウィジェットは内部リストに追加されます。indexOf() 関数は、そのリスト内のウィジェットのインデックスを返します。 ウィジェットは、addWidget() 関数を使用してリストの末尾に追加するか、insertWidget() 関数を使用して指定されたインデックス位置に挿入することができます。removeWidget() 関数は、指定されたインデックス位置にあるウィジェットをレイアウトから削除します。レイアウトに含まれるウィジェットの数は、count() 関数を使用して取得できます。

widget() 関数は、指定されたインデックス位置にあるウィジェットを返します。画面に表示されているウィジェットのインデックスはcurrentIndex() によって取得され、setCurrentIndex() を使用して変更できます。同様に、現在表示されているウィジェットはcurrentWidget() 関数を使用して取得し、setCurrentWidget() 関数を使用して変更することができます。

レイアウト内の現在のウィジェットが変更されたり、ウィジェットがレイアウトから削除されたりすると、それぞれcurrentChanged() およびwidgetRemoved() シグナルが発火します。

「 QStackedWidget 」および「QTabWidget 」も参照してください 。

メンバ型のドキュメント

enum QStackedLayout::StackingMode

この列挙型は、レイアウトが子ウィジェットの表示状態をどのように扱うかを指定します。

定数値説明
QStackedLayout::StackOne0現在のウィジェットのみが表示されます。これがデフォルトです。
QStackedLayout::StackAll1すべてのウィジェットが表示されます。現在のウィジェットは単に前面に表示されるだけです。

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

[read-only] count : int

このプロパティは、レイアウトに含まれるウィジェットの数を保持します

アクセス関数:

virtual int count() const override

currentIndex() およびwidget()も参照してください 。

currentIndex : int

このプロパティは、表示されているウィジェットのインデックス位置を保持します

現在表示されているウィジェットがない場合、現在のインデックスは -1 になります。

アクセス関数:

int currentIndex() const
void setCurrentIndex(int index)

Notifierシグナル:

void currentChanged(int index)

currentWidget() およびindexOf()も参照してください 。

stackingMode : StackingMode

子ウィジェットの表示方法を決定します。

デフォルト値はStackOne です。このプロパティをStackAll に設定すると、他のウィジェットの上に追加の描画を行うオーバーレイウィジェット(例:グラフィカルエディタ)のレイアウトを利用できるようになります。

アクセス関数:

QStackedLayout::StackingMode stackingMode() const
void setStackingMode(QStackedLayout::StackingMode stackingMode)

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

QStackedLayout::QStackedLayout()

親を持たない QStackedLayout を生成します。

この QStackedLayout は、後でウィジェットに配置して初めて有効になります。

addWidget() およびinsertWidget()も参照してください 。

[explicit] QStackedLayout::QStackedLayout(QLayout *parentLayout)

新しい QStackedLayout を作成し、それを指定されたparentLayout に挿入します。

[explicit] QStackedLayout::QStackedLayout(QWidget *parent)

指定されたparent を使用して、新しいQStackedLayoutを構築します。

このレイアウトは、parent ウィジェット上に自身を配置し、その子要素のジオメトリを管理します。

[virtual noexcept] QStackedLayout::~QStackedLayout()

QStackedLayout を破棄します。なお、レイアウト内のウィジェットは破棄されない点に注意してください。

[override virtual] void QStackedLayout::addItem(QLayoutItem *item)

QLayout::addItem(QLayoutItem *item) を再実装します。

int QStackedLayout::addWidget(QWidget *widget)

指定されたwidget をこのレイアウトの末尾に追加し、widget のインデックス位置を返します。

この関数が呼び出される前にQStackedLayout が空の場合、指定されたwidget が現在のウィジェットとなります。

insertWidget()、removeWidget()、およびsetCurrentWidget()も参照してください 。

[signal] void QStackedLayout::currentChanged(int index)

このシグナルは、レイアウト内の現在のウィジェットが変更されるたびに発火します。index は、新しい現在のウィジェットのインデックスを指定します。新しいウィジェットがない場合(たとえば、QStackedLayout にウィジェットが存在しない場合など)は-1となります。

注: プロパティ `currentIndex` に対する通知 シグナルです。

関連項目: ` currentWidget()` および `setCurrentWidget()`。

QWidget *QStackedLayout::currentWidget() const

現在のウィジェットを返します。このレイアウトにウィジェットがない場合は、nullptr を返します。

currentIndex() およびsetCurrentWidget()も参照してください 。

[override virtual] bool QStackedLayout::hasHeightForWidth() const

QLayoutItem::hasHeightForWidth() const を再実装します。

[override virtual] int QStackedLayout::heightForWidth(int width) const

QLayoutItem::heightForWidth(int) const を再実装しています。

int QStackedLayout::insertWidget(int index, QWidget *widget)

このQStackedLayout において、指定されたindex の位置に、指定されたwidget を挿入します。index が範囲外の場合、ウィジェットは末尾に追加されます(この場合、返されるのはwidget の実際のインデックスとなります)。

この関数が呼び出される前にQStackedLayout が空の場合、指定されたwidget が現在のウィジェットとなります。

現在のインデックス以下に新しいウィジェットを挿入すると、現在のインデックスはインクリメントされますが、現在のウィジェットは保持されます。

addWidget()、removeWidget()、およびsetCurrentWidget()も参照してください 。

[override virtual] QLayoutItem *QStackedLayout::itemAt(int index) const

QLayout::itemAt(int index) const を再実装します。

[override virtual] QSize QStackedLayout::minimumSize() const

QLayout::minimumSize() const を再実装します。

[slot] void QStackedLayout::setCurrentWidget(QWidget *widget)

現在のウィジェットを、指定されたwidget に設定します。新しい現在のウィジェットは、すでにこのスタックされたレイアウト内に含まれている必要があります。

setCurrentIndex() およびcurrentWidget()も参照してください 。

[override virtual] void QStackedLayout::setGeometry(const QRect &rect)

QLayout::setGeometry(const QRect &r) を再実装します。

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

QLayoutItem::sizeHint() const を再実装します。

[override virtual] QLayoutItem *QStackedLayout::takeAt(int index)

QLayout::takeAt(int index) を再実装します。

QWidget *QStackedLayout::widget(int index) const

指定されたindex にあるウィジェットを返します。指定された位置にウィジェットがない場合は、nullptr を返します。

currentWidget() およびindexOf()も参照してください 。

[signal, since 6.9] void QStackedLayout::widgetAdded(int index)

このシグナルは、ウィジェットが追加または挿入されるたびに発火します。ウィジェットのindex がパラメータとして渡されます。

この関数は Qt 6.9 で導入されました。

addWidget() およびinsertWidget()も参照してください 。

[signal] void QStackedLayout::widgetRemoved(int index)

このシグナルは、ウィジェットがレイアウトから削除されるたびに発火します。ウィジェットのindex がパラメータとして渡されます。

removeWidget()も参照してください 。

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