QStackedWidgetで、ウィジェットを切り替える方法


はじめに

Qtを使って、ウィジェットの一部を動的に切り替える方法を探していたところ、QStackedWidgetを見つけたので、使い方を簡単にまとめます。

QStackedWidgetの使い方

QStackedWidgetを使うには、QStackedWidgetをインクルードする必要があります。

#include <QStackedWidget>

QStackedWidgetにウィジェットを追加して、特定のウィジェットを表示させるには、addWidget(QWidget *widget)setCurrentIndex(int index)を使います。

QWidget *page1 = new QWidget;
QWidget *page2 = new QWidget;

QStackedWidget *stackedWidget = new QStackedWidget;

// ウィジェットを追加して、そのインデックスを受け取る
int idx_page1 = stackedWidget->addWidget(page1);
int idx_page2 = stackedWidget->addWidget(page2);

// 表示したいウィジェットのインデックスをセット
stackedWidget->setCurrentIndex(idx_page1);

インデックスの他に、ウィジェットを指定することもできます。

stackedWidget->setCurrentWidget(page1);

さらに詳しい解説は、公式のドキュメントを参照してください。
Qt Documentation - QStackedWidget Class

QtDesignerを使う場合

QtDesignerのウィジェットボックスにある、Stacked WidgetがQStackedWidgetです。

配置すると、カラのページを二つ持ったQStackedWidgetができます。
これらのページを直接編集しても良いですし、表示させたいウィジェットを別で作成しておいて、ページを格上げすることもできます。

QStackedWidgetを使ったサンプル

ページを進めたり、追加・削除ができるサンプルを、GitHubに上げておきました。
GitHub - QStackedWidgetを使ったサンプル

おわりに

QStackedWidgetを使えば、インストーラでよくある、次へを押して進んでいくようなアプリケーションや、モードに応じてウィジェットの一部が変わるようなアプリケーションを作れそうです。他にも便利な機能があると思うので、機会があればさらに探ってみたいと思います。また、使い方について、アドバイス等を頂けたらありがたいです。