QMdiArea Class
QMdiArea ウィジェットは、MDI ウィンドウが表示される領域を提供します。詳細...
| ヘッダー: | #include <QMdiArea> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 継承元: | QAbstractScrollArea |
パブリック型
| enum | AreaOption { DontMaximizeSubWindowOnActivation } |
| flags | AreaOptions |
| enum | ViewMode { SubWindowView, TabbedView } |
| enum | WindowOrder { CreationOrder, StackingOrder, ActivationHistoryOrder } |
プロパティ
|
|
パブリック関数
| QMdiArea(QWidget *parent = nullptr) | |
| virtual | ~QMdiArea() |
| QMdiArea::WindowOrder | activationOrder() const |
| QMdiSubWindow * | activeSubWindow() const |
| QMdiSubWindow * | addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags()) |
| QBrush | background() const |
| QMdiSubWindow * | currentSubWindow() const |
| bool | documentMode() const |
| void | removeSubWindow(QWidget *widget) |
| void | setActivationOrder(QMdiArea::WindowOrder order) |
| void | setBackground(const QBrush &background) |
| void | setDocumentMode(bool enabled) |
| void | setOption(QMdiArea::AreaOption option, bool on = true) |
| void | setTabPosition(QTabWidget::TabPosition position) |
| void | setTabShape(QTabWidget::TabShape shape) |
| void | setTabsClosable(bool closable) |
| void | setTabsMovable(bool movable) |
| void | setViewMode(QMdiArea::ViewMode mode) |
| QList<QMdiSubWindow *> | subWindowList(QMdiArea::WindowOrder order = CreationOrder) const |
| QTabWidget::TabPosition | tabPosition() const |
| QTabWidget::TabShape | tabShape() const |
| bool | tabsClosable() const |
| bool | tabsMovable() const |
| bool | testOption(QMdiArea::AreaOption option) const |
| QMdiArea::ViewMode | viewMode() const |
再実装されたパブリック関数
| virtual QSize | minimumSizeHint() const override |
| virtual QSize | sizeHint() const override |
パブリックスロット
| void | activateNextSubWindow() |
| void | activatePreviousSubWindow() |
| void | cascadeSubWindows() |
| void | closeActiveSubWindow() |
| void | closeAllSubWindows() |
| void | setActiveSubWindow(QMdiSubWindow *window) |
| void | tileSubWindows() |
シグナル
| void | subWindowActivated(QMdiSubWindow *window) |
再実装されたプロテクト関数
| virtual void | childEvent(QChildEvent *childEvent) override |
| virtual bool | event(QEvent *event) override |
| virtual bool | eventFilter(QObject *object, QEvent *event) override |
| virtual void | paintEvent(QPaintEvent *paintEvent) override |
| virtual void | resizeEvent(QResizeEvent *resizeEvent) override |
| virtual void | scrollContentsBy(int dx, int dy) override |
| virtual void | showEvent(QShowEvent *showEvent) override |
| virtual void | timerEvent(QTimerEvent *timerEvent) override |
| virtual bool | viewportEvent(QEvent *event) override |
保護されたスロット
| virtual void | setupViewport(QWidget *viewport) override |
詳細な説明
QMdiArea は、本質的に MDI ウィンドウのウィンドウマネージャーのように機能します。例えば、管理対象のウィンドウを自身の上に描画し、カスケード配置やタイル配置で整列させます。 QMdiAreaは、MDIアプリケーションを作成するためのQMainWindow の中心ウィジェットとして一般的に使用されますが、任意のレイアウトに配置することも可能です。次のコードは、メインウィンドウにエリアを追加するものです:
QMainWindow *mainWindow = new QMainWindow;
mainWindow->setCentralWidget(mdiArea);トップレベルウィンドウ用のウィンドウマネージャとは異なり、QMdiArea では、現在のウィジェットスタイルでサポートされている限り、すべてのウィンドウフラグ(Qt::WindowFlags )がサポートされています。
QMdiArea内のサブウィンドウは、QMdiSubWindow のインスタンスです。これらはaddSubWindow()を使用してMDIエリアに追加されます。通常、内部ウィジェットとして設定されたQWidget をこの関数に渡ししますが、QMdiSubWindow を直接渡すことも可能です。 このクラスはQWidget を継承しており、プログラミングの際には通常のトップレベルウィンドウと同じAPIを使用できます。QMdiSubWindow には、MDIウィンドウ特有の挙動もあります。詳細については、QMdiSubWindow クラスの説明を参照してください。
サブウィンドウは、キーボードフォーカスを取得したとき、またはsetFocus()が呼び出されたときにアクティブになります。ユーザーは、通常の方法でフォーカスを移動させることでウィンドウをアクティブにします。MDI領域は、アクティブなウィンドウが変更されたときにsubWindowActivated()シグナルを発し、activeSubWindow()関数はアクティブなサブウィンドウを返します。
便利関数subWindowList()は、すべてのサブウィンドウのリストを返します。この情報は、例えばウィンドウのリストを含むポップアップメニューなどで利用できます。
サブウィンドウは、現在のWindowOrder によってソートされます。これは、subWindowList()、activateNextSubWindow()、およびactivatePreviousSubWindow()で使用されます。また、cascadeSubWindows()やtileSubWindows()を使用してウィンドウをカスケード配置またはタイル配置する際にも使用されます。
QMdiArea は、サブウィンドウ用にcascadeSubWindows() とtileSubWindows() の 2 つの組み込みレイアウト戦略を提供しています。どちらもスロットであり、メニュー項目に簡単に接続できます。
![]() | ![]() |
注: QMdiArea のデフォルトのスクロールバープロパティは Qt::ScrollBarAlwaysOff です。
「QMdiSubWindow」も参照してください 。
メンバ型のドキュメント
enum QMdiArea::AreaOption
flags QMdiArea::AreaOptions
この列挙型は、QMdiArea の動作をカスタマイズするためのオプションを表します。
| 定数 | 定数値 | 説明 |
|---|---|---|
QMdiArea::DontMaximizeSubWindowOnActivation | 0x1 | アクティブなサブウィンドウが最大化されている場合、デフォルトの挙動では、次にアクティブ化されたサブウィンドウも最大化されます。この挙動を望まない場合は、このオプションを設定してください。 |
AreaOptions 型は、QFlags<AreaOption> の typedef です。この型は、AreaOption 値の論理和 (OR) を格納します。
enum QMdiArea::ViewMode
この列挙型は、エリアの表示モード、つまりサブウィンドウがどのように表示されるかを定義します。
| 定数 | 値 | 説明 |
|---|---|---|
QMdiArea::SubWindowView | 0 | サブウィンドウをウィンドウフレーム付きで表示します(デフォルト)。 |
QMdiArea::TabbedView | 1 | タブバーにタブを表示してサブウィンドウを表示します。 |
setViewMode()も参照してください 。
enum QMdiArea::WindowOrder
subWindowList() が返す子ウィンドウのリストの並べ替えに使用する基準を指定します。cascadeSubWindows() およびtileSubWindows() 関数は、ウィンドウを配置する際にこの順序に従います。
| 定数 | 値 | 説明 |
|---|---|---|
QMdiArea::CreationOrder | 0 | ウィンドウは、作成された順に返されます。 |
QMdiArea::StackingOrder | 1 | ウィンドウは、スタックされた順序で返され、最上部のウィンドウがリストの最後になります。 |
QMdiArea::ActivationHistoryOrder | 2 | ウィンドウは、アクティブになった順に返されます。 |
関連項目: subWindowList()。
プロパティのドキュメント
activationOrder : WindowOrder
このプロパティは、サブウィンドウのリストの並べ替え基準を保持します
このプロパティは、subWindowList() によって返されるサブウィンドウのリストの並べ替え基準を指定します。デフォルトでは、ウィンドウの作成順となります。
関連関数:
| QMdiArea::WindowOrder | activationOrder() const |
| void | setActivationOrder(QMdiArea::WindowOrder order) |
関連項目: subWindowList()。
background : QBrush
このプロパティは、ワークスペースの背景ブラシを保持します
このプロパティは、ワークスペース領域自体の背景ブラシを設定します。デフォルトでは灰色ですが、任意のブラシ(色、グラデーション、ピクマップなど)を設定できます。
アクセス関数:
| QBrush | background() const |
| void | setBackground(const QBrush &background) |
documentMode : bool
このプロパティは、タブ付き表示モードにおいて、タブバーがドキュメントモードに設定されているかどうかを表します。
ドキュメントモードはデフォルトで無効になっています。
アクセス関数:
| bool | documentMode() const |
| void | setDocumentMode(bool enabled) |
関連項目: QTabBar::documentMode およびsetViewMode()。
tabPosition : QTabWidget::TabPosition
このプロパティは、タブ表示モードにおけるタブの位置を保持します。
このプロパティの取り得る値は、QTabWidget::TabPosition 列挙型で定義されています。
アクセス関数:
| QTabWidget::TabPosition | tabPosition() const |
| void | setTabPosition(QTabWidget::TabPosition position) |
「 QTabWidget::TabPosition 」および「setViewMode()」も参照してください 。
tabShape : QTabWidget::TabShape
このプロパティは、タブ付き表示モードにおけるタブの形状を指定します。
このプロパティの取り得る値は、QTabWidget::Rounded (デフォルト)またはQTabWidget::Triangular です。
アクセス関数:
| QTabWidget::TabShape | tabShape() const |
| void | setTabShape(QTabWidget::TabShape shape) |
QTabWidget::TabShape およびsetViewMode()も参照してください 。
tabsClosable : bool
このプロパティは、タブ表示モードにおいて、タブバーの各タブに閉じるボタンを配置するかどうかを指定します。
デフォルトでは、タブは閉じることができません。
アクセス関数:
| bool | tabsClosable() const |
| void | setTabsClosable(bool closable) |
関連項目: QTabBar::tabsClosable およびsetViewMode()を参照してください 。
tabsMovable : bool
このプロパティは、タブ表示モードにおいて、ユーザーがタブバー領域内でタブを移動できるかどうかを指定します。
デフォルトでは、タブは移動できません。
アクセス関数:
| bool | tabsMovable() const |
| void | setTabsMovable(bool movable) |
関連項目: QTabBar::movable およびsetViewMode()。
viewMode : ViewMode
このプロパティは、QMdiArea におけるサブウィンドウの表示方法を指定します。
デフォルトでは、SubWindowView はサブウィンドウの表示に使用されます。
アクセス関数:
| QMdiArea::ViewMode | viewMode() const |
| void | setViewMode(QMdiArea::ViewMode mode) |
関連項目: ViewMode 、setTabShape()、およびsetTabPosition()。
メンバ関数のドキュメント
QMdiArea::QMdiArea(QWidget *parent = nullptr)
空のMDI領域を作成します。parent は、QWidget のコンストラクタに渡されます。
[virtual noexcept] QMdiArea::~QMdiArea()
MDI領域を削除します。
[slot] void QMdiArea::activateNextSubWindow()
子ウィンドウのリストにある別のウィンドウにキーボードフォーカスを移します。アクティブになるウィンドウは、現在のactivation order によって決定される次のウィンドウとなります。
activatePreviousSubWindow() およびQMdiArea::WindowOrderも参照してください 。
[slot] void QMdiArea::activatePreviousSubWindow()
子ウィンドウのリストにある別のウィンドウにキーボードフォーカスを移します。アクティブになるウィンドウは、現在のactivation order によって決定される直前のウィンドウとなります。
activateNextSubWindow() およびQMdiArea::WindowOrderも参照してください 。
QMdiSubWindow *QMdiArea::activeSubWindow() const
現在アクティブなサブウィンドウへのポインタを返します。現在アクティブなウィンドウがない場合は、nullptr が返されます。
サブウィンドウは、ウィンドウの状態に関してはトップレベルウィンドウとして扱われます。つまり、MDI 領域外のウィジェットがアクティブなウィンドウである場合、どのサブウィンドウもアクティブにはなりません。なお、MDI 領域を含むウィンドウ内のウィジェットがフォーカスを獲得すると、そのウィンドウがアクティブになることに注意してください。
setActiveSubWindow() およびQt::WindowStateも参照してください 。
QMdiSubWindow *QMdiArea::addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags())
MDI領域に「widget 」という新しいサブウィンドウを追加します。windowFlags がゼロ以外の場合、ウィジェットに設定されているフラグよりも優先されます。
widget は、QMdiSubWindow または別のQWidget のいずれかです(後者の場合、MDI エリアはサブウィンドウを作成し、widget を内部ウィジェットとして設定します)。
注: サブウィンドウが追加されると 、その親はQMdiArea のビューポートウィジェットになります。
QMdiArea mdiArea;
QMdiSubWindow *subWindow1 = new QMdiSubWindow;
subWindow1->setWidget(internalWidget1);
subWindow1->setAttribute(Qt::WA_DeleteOnClose);
mdiArea.addSubWindow(subWindow1);
QMdiSubWindow *subWindow2 =
mdiArea.addSubWindow(internalWidget2);独自のサブウィンドウを作成する場合、MDI エリア内でウィンドウが閉じられた際にそのウィンドウを削除したい場合は、Qt::WA_DeleteOnClose ウィジェット属性を設定する必要があります。設定しない場合、ウィンドウは非表示になり、MDI エリアは次のサブウィンドウをアクティブにしません。
MDI 領域に追加された `QMdiSubWindow ` を返します。
removeSubWindow()も参照してください 。
[slot] void QMdiArea::cascadeSubWindows()
すべての子ウィンドウをカスケード配置にします。
tileSubWindows()も参照してください 。
[override virtual protected] void QMdiArea::childEvent(QChildEvent *childEvent)
QObject::childEvent(QChildEvent *event) を再実装します。
[slot] void QMdiArea::closeActiveSubWindow()
アクティブなサブウィンドウを閉じます。
closeAllSubWindows()も参照してください 。
[slot] void QMdiArea::closeAllSubWindows()
各ウィンドウにQCloseEvent を送信して、すべてのサブウィンドウを閉じます。サブウィンドウが閉じられる前に、そのサブウィンドウからsubWindowActivated()シグナルを受信する場合があります(別のサブウィンドウが閉じられている際に、MDI領域が当該サブウィンドウをアクティブにした場合など)。
閉じるイベントを無視するサブウィンドウは、開いたままになります。
closeActiveSubWindow()も参照してください 。
QMdiSubWindow *QMdiArea::currentSubWindow() const
現在のサブウィンドウへのポインタを返します。現在のサブウィンドウがない場合は、nullptr を返します。
QMdiArea を含むQApplication がアクティブな場合、この関数はactiveSubWindow() と同じ値を返します。
activeSubWindow() およびQApplication::activeWindow()も参照してください 。
[override virtual protected] bool QMdiArea::event(QEvent *event)
QAbstractScrollArea::event(QEvent *event) を再実装します。
[override virtual protected] bool QMdiArea::eventFilter(QObject *object, QEvent *event)
QObject::eventFilter(QObject *watched, QEvent *event) を再実装します。
[override virtual] QSize QMdiArea::minimumSizeHint() const
QAbstractScrollArea::minimumSizeHint() const を再実装します。
[override virtual protected] void QMdiArea::paintEvent(QPaintEvent *paintEvent)
QAbstractScrollArea::paintEvent(QPaintEvent *event) を再実装します。
void QMdiArea::removeSubWindow(QWidget *widget)
MDI領域からwidget を削除します。widget は、QMdiSubWindow 、またはサブウィンドウの内部ウィジェットである必要があります。注:widget は、QMdiArea によって実際には削除されることはありません。QMdiSubWindow が渡された場合、その親はnullptr に設定され、削除されます。一方、内部ウィジェットが渡された場合、子ウィジェットはnullptr に設定され、QMdiSubWindow は削除されません。
addSubWindow()も参照してください 。
[override virtual protected] void QMdiArea::resizeEvent(QResizeEvent *resizeEvent)
QAbstractScrollArea::resizeEvent(QResizeEvent *event) を再実装します。
[override virtual protected] void QMdiArea::scrollContentsBy(int dx, int dy)
QAbstractScrollArea::scrollContentsBy(int dx, int dy) を再実装します。
[slot] void QMdiArea::setActiveSubWindow(QMdiSubWindow *window)
サブウィンドウ `window` をアクティブにします。window が `nullptr` の場合、現在アクティブなウィンドウはすべて非アクティブになります。
activeSubWindow()も参照してください 。
void QMdiArea::setOption(QMdiArea::AreaOption option, bool on = true)
on が true の場合、MDI 領域で「option 」が有効になります。それ以外の場合は無効になります。各オプションの効果については、AreaOption を参照してください。
AreaOption およびtestOption()も参照してください 。
[override virtual protected slot] void QMdiArea::setupViewport(QWidget *viewport)
QAbstractScrollArea::setupViewport(QWidget *viewport) を再実装します。
このスロットは、setViewport()が呼び出された後、QAbstractScrollArea によって呼び出されます。QMdiArea のサブクラスでこの関数を再実装し、新しいviewport が使用される前に初期化してください。
setViewport()も参照してください 。
[override virtual protected] void QMdiArea::showEvent(QShowEvent *showEvent)
QWidget::showEvent(QShowEvent *event) を再実装します。
[override virtual] QSize QMdiArea::sizeHint() const
QAbstractScrollArea::sizeHint() const を再実装します。
[signal] void QMdiArea::subWindowActivated(QMdiSubWindow *window)
QMdiArea window がアクティブになった後に、このシグナルを発行します。 が の場合、 は直前に最後のアクティブなウィンドウを非アクティブにし、ワークスペース上にアクティブなウィンドウが存在しません。window nullptr QMdiArea
QMdiArea::activeSubWindow()も参照してください 。
QList<QMdiSubWindow *> QMdiArea::subWindowList(QMdiArea::WindowOrder order = CreationOrder) const
MDI 領域内のすべてのサブウィンドウのリストを返します。order がCreationOrder (デフォルト)の場合、ウィンドウはワークスペースに挿入された順序でソートされます。order がStackingOrder の場合、ウィンドウはスタック順にリストされ、最上部のウィンドウがリストの最後の項目となります。order がActivationHistoryOrder の場合、ウィンドウは直近のアクティブ化履歴に基づいてリストされます。
WindowOrderも参照してください 。
bool QMdiArea::testOption(QMdiArea::AreaOption option) const
option が有効な場合はtrue を返し、そうでない場合はfalse を返します。
AreaOption およびsetOption()も参照してください 。
[slot] void QMdiArea::tileSubWindows()
すべての子ウィンドウをタイル状に配置します。
cascadeSubWindows()も参照してください 。
[override virtual protected] void QMdiArea::timerEvent(QTimerEvent *timerEvent)
QObject::timerEvent(QTimerEvent *event) の再実装です。
[override virtual protected] bool QMdiArea::viewportEvent(QEvent *event)
QAbstractScrollArea::viewportEvent(QEvent *event) を再実装しています。
© 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.

