このページでは

アプリケーションのメインウィンドウ

メインウィンドウクラスの概要

これらのクラスは、メインウィンドウ自体、メニューやツールバー、ステータスバーなど、一般的な現代的なアプリケーションのメインウィンドウに必要なすべての機能を提供します。

QDockWidget

QMainWindow 内にドッキングしたり、デスクトップ上でトップレベルウィンドウとしてフローティング表示したりできるウィジェット

QMainWindow

アプリケーションのメインウィンドウ

QMdiArea

MDI ウィンドウが表示される領域

QMdiSubWindow

QMdiArea 用のサブウィンドウクラス

QMenu

メニューバー、コンテキストメニュー、その他のポップアップメニューで使用するためのメニューウィジェット

QMenuBar

水平メニューバー

QSizeGrip

最上位ウィンドウのサイズ変更用ハンドル

QStatusBar

ステータス情報の表示に適した水平バー

QToolBar

一連のコントロールを格納する移動可能なパネル

QWidgetAction

ツールバーなどのアクションベースのコンテナにカスタムウィジェットを挿入するためのインターフェースを QAction に拡張したもの

メインウィンドウのクラス

Qtでは、メインウィンドウおよび関連するユーザーインターフェースコンポーネントを管理するために、以下のクラスを提供しています:

  • QMainWindow は、アプリケーションを構築するための中心となるクラスです。関連するQDockWidget およびQToolBar クラスとともに、アプリケーションの最上位ユーザーインターフェースを構成します。
  • QDockWidget は、取り外し可能なツールパレットやヘルパーウィンドウの作成に使用できるウィジェットを提供します。ドックウィジェットは自身のプロパティを管理しており、移動や閉じたり、外部ウィンドウとしてフローティング表示したりすることができます。
  • QToolBar ボタン、ドロップダウンメニュー、コンボボックス、スピンボックスなど、さまざまなアクション関連のウィジェットを格納できる汎用ツールバーウィジェットを提供します。Qtでは統一されたアクションモデルが重視されているため、ツールバーはメニューやキーボードショートカットとシームレスに連携します。

サンプルコード

QMainWindow の使用方法は簡単です。通常、QMainWindow をサブクラス化し、QMainWindow のコンストラクタ内でメニュー、ツールバー、ドックウィジェットを設定します。

メインウィンドウにメニューバーを追加するには、メニューを作成し、それらをメインウィンドウのメニューバーに追加します。QMainWindow::menuBar() 関数は、最初に呼び出された際に自動的にメニューバーを作成することに注意してください。また、QMainWindow::setMenuBar() を呼び出すことで、メインウィンドウでカスタムメニューバーを使用することもできます。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ...
    newAct = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentNew),
                         tr("&New"), this);
    newAct->setShortcuts(QKeySequence::New);
    newAct->setStatusTip(tr("Create a new file"));
    connect(newAct, &QAction::triggered, this, &MainWindow::newFile);

    openAct = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen),
                          tr("&Open..."), this);
    openAct->setShortcuts(QKeySequence::Open);
    openAct->setStatusTip(tr("Open an existing file"));
    connect(openAct, &QAction::triggered, this, &MainWindow::open);
    ...

アクションを作成したら、それらをメインウィンドウのコンポーネントに追加できます。まずは、ポップアップメニューに追加してみましょう:

    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(newAct);
    fileMenu->addAction(openAct);
    ...
    fileMenu->addSeparator();
    ...

QToolBar およびQMenu クラスは、一貫性のある API を提供するために Qt のアクションシステムを利用しています。上記のコードでは、QMenu::addAction() 関数を使用して、既存のアクションをファイルメニューに追加しました。QToolBar もこの関数を提供しており、メインウィンドウの異なる部分でアクションを簡単に再利用できます。これにより、不必要な作業の重複を避けることができます。

メインウィンドウの子としてツールバーを作成し、そこに必要なアクションを追加します。

fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAct);
fileToolBar->addAction(openAct);
    ...
fileToolbar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
addToolBar(Qt::TopToolBarArea, fileToolbar);

この例では、ツールバーはメインウィンドウの上部および下部のツールバー領域に限定されており、最初は上部のツールバー領域に配置されます。newAct およびopenAct で指定されたアクションが、ツールバーとファイルメニューの両方に表示されることがわかります。

QDockWidget QToolBar と同様に使用されます。メインウィンドウの子としてドックウィジェットを作成し、そのドックウィジェットの子としてウィジェットを追加します:

contentsWindow = new QDockWidget(tr("Table of Contents"), this);
contentsWindow->setAllowedAreas(Qt::LeftDockWidgetArea
                              | Qt::RightDockWidgetArea);
addDockWidget(Qt::LeftDockWidgetArea, contentsWindow);

headingList = new QListWidget(contentsWindow);
contentsWindow->setWidget(headingList);

この例では、ドックウィジェットは左右のドック領域にのみ配置可能であり、初期状態では左側のドック領域に配置されます。

QMainWindow API を使用すると、ドックウィジェット領域の四隅をどのドックウィジェット領域が占めるかをカスタマイズできます。必要に応じて、QMainWindow::setCorner() 関数を使用してデフォルト設定を変更できます:

setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);

次の図は、上記のコードによって生成される構成を示しています。このレイアウトでは、左右のドックウィジェットがメインウィンドウの上部と下部の角を占めることに注意してください。

中央のウィジェットに対するドックウィンドウの位置

メインウィンドウのすべてのコンポーネントの設定が完了したら、次のようなコードを使用して中央のウィジェットを作成・配置します:

QWidget *centralWidget = new QWidget(this);
setCentralWidget(centralWidget);

中央のウィジェットは、QWidget の任意のサブクラスにすることができます。

© 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.