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

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

これらのクラスは、メイン・ウィンドウ自体、メニュー・バー、ツール・バー、ステータス・バーなど、典型的なモダンなメイン・アプリケーション・ウィンドウに必要なものをすべて提供します。

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();
    ...

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

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

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

この例では、ツールバーはメインウィンドウの上部と下部のツールバーエリアに制限され、最初は上部のツールバーエリアに配置されます。newActopenAct で指定されたアクションが、ツールバーとファイルメニューの両方に表示されることがわかる。

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 のサブクラスです。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。