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 } |
プロパティ
- count : int
- currentIndex : int
- stackingMode : StackingMode
パブリック関数
| 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::StackOne | 0 | 現在のウィジェットのみが表示されます。これがデフォルトです。 |
QStackedLayout::StackAll | 1 | すべてのウィジェットが表示されます。現在のウィジェットは単に前面に表示されるだけです。 |
プロパティのドキュメント
[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.