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