Help us understand the problem. What is going on with this article?

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

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

tatsuteb
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away