Posted at

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

More than 1 year has passed since last update.


はじめに

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です。

スクリーンショット 2016-12-10 18.24.55.png

配置すると、カラのページを二つ持ったQStackedWidgetができます。

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

スクリーンショット 2016-12-10 18.26.25.png


QStackedWidgetを使ったサンプル

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

GitHub - QStackedWidgetを使ったサンプル


おわりに

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