QMainWindow Class
QMainWindow クラスは、アプリケーションのメインウィンドウを提供します。詳細...
| ヘッダー: | #include <QMainWindow> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 継承元: | QWidget |
パブリック型
| enum | DockOption { AnimatedDocks, AllowNestedDocks, AllowTabbedDocks, ForceTabbedDocks, VerticalTabs, GroupedDragging } |
| flags | DockOptions |
プロパティ
|
|
パブリック関数
| QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) | |
| virtual | ~QMainWindow() |
| void | addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget) |
| void | addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation) |
| void | addToolBar(Qt::ToolBarArea area, QToolBar *toolbar) |
| void | addToolBar(QToolBar *toolbar) |
| QToolBar * | addToolBar(const QString &title) |
| void | addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea) |
| QWidget * | centralWidget() const |
| Qt::DockWidgetArea | corner(Qt::Corner corner) const |
| virtual QMenu * | createPopupMenu() |
| QMainWindow::DockOptions | dockOptions() const |
| Qt::DockWidgetArea | dockWidgetArea(QDockWidget *dockwidget) const |
| bool | documentMode() const |
| QSize | iconSize() const |
| void | insertToolBar(QToolBar *before, QToolBar *toolbar) |
| void | insertToolBarBreak(QToolBar *before) |
| bool | isAnimated() const |
| bool | isDockNestingEnabled() const |
| QMenuBar * | menuBar() const |
| QWidget * | menuWidget() const |
| void | removeDockWidget(QDockWidget *dockwidget) |
| void | removeToolBar(QToolBar *toolbar) |
| void | removeToolBarBreak(QToolBar *before) |
| void | resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation) |
| bool | restoreDockWidget(QDockWidget *dockwidget) |
| bool | restoreState(const QByteArray &state, int version = 0) |
| QByteArray | saveState(int version = 0) const |
| void | setCentralWidget(QWidget *widget) |
| void | setCorner(Qt::Corner corner, Qt::DockWidgetArea area) |
| void | setDockOptions(QMainWindow::DockOptions options) |
| void | setDocumentMode(bool enabled) |
| void | setIconSize(const QSize &iconSize) |
| void | setMenuBar(QMenuBar *menuBar) |
| void | setMenuWidget(QWidget *menuBar) |
| void | setStatusBar(QStatusBar *statusbar) |
| void | setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition) |
| void | setTabShape(QTabWidget::TabShape tabShape) |
| void | setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle) |
| void | splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation) |
| QStatusBar * | statusBar() const |
| QTabWidget::TabPosition | tabPosition(Qt::DockWidgetArea area) const |
| QTabWidget::TabShape | tabShape() const |
| QList<QDockWidget *> | tabifiedDockWidgets(QDockWidget *dockwidget) const |
| void | tabifyDockWidget(QDockWidget *first, QDockWidget *second) |
| QWidget * | takeCentralWidget() |
| Qt::ToolBarArea | toolBarArea(const QToolBar *toolbar) const |
| bool | toolBarBreak(QToolBar *toolbar) const |
| Qt::ToolButtonStyle | toolButtonStyle() const |
| bool | unifiedTitleAndToolBarOnMac() const |
パブリックスロット
| void | setAnimated(bool enabled) |
| void | setDockNestingEnabled(bool enabled) |
| void | setUnifiedTitleAndToolBarOnMac(bool set) |
シグナル
| void | iconSizeChanged(const QSize &iconSize) |
| void | tabifiedDockWidgetActivated(QDockWidget *dockWidget) |
| void | toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle) |
再実装された保護関数
| virtual void | contextMenuEvent(QContextMenuEvent *event) override |
| virtual bool | event(QEvent *event) override |
詳細な説明
Qt メインウィンドウフレームワーク
メインウィンドウは、アプリケーションのユーザーインターフェースを構築するためのフレームワークを提供します。 Qt には、メインウィンドウの管理を行うための QMainWindow およびその関連クラスが用意されています。QMainWindow には独自のレイアウトがあり、そこにQToolBar、QDockWidget、QMenuBar 、QStatusBar を追加することができます。このレイアウトには、あらゆる種類のウィジェットを配置できる中央領域があります。以下の画像で、このレイアウトを確認できます。

メインウィンドウのコンポーネントの作成
中央のウィジェットには、通常、QTextEdit やQGraphicsView などの標準的なQtウィジェットが使用されます。高度なアプリケーションでは、カスタムウィジェットを使用することも可能です。中央のウィジェットは、setCentralWidget() で設定します。
メインウィンドウには、単一ドキュメントインターフェース(SDI)と複数ドキュメントインターフェース(MDI)の2種類があります。QtでMDIアプリケーションを作成するには、QMdiArea を中央ウィジェットとして使用します。
ここでは、メインウィンドウに追加できるその他の各ウィジェットについて解説します。それらの作成および追加方法の例を示します。
メニューの作成
Qtでは、メニューはQMenu で実装されており、QMainWindowはそれらをQMenuBar に保持しています。QActionがメニューに追加され、メニュー項目として表示されます。
menuBar() を呼び出してウィンドウのQMenuBar を取得し、QMenuBar::addMenu()を使用してメニューを追加することで、メインウィンドウのメニューバーに新しいメニューを追加できます。
QMainWindow にはデフォルトのメニューバーが付属していますが、setMenuBar() を使用して独自に設定することも可能です。カスタムメニューバー(つまり、QMenuBar ウィジェットを使用しないもの)を実装したい場合は、setMenuWidget() を使用して設定できます。
メニューの作成例を以下に示します。
void MainWindow::createMenus()
{
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);
fileMenu->addAction(openAct);
fileMenu->addAction(saveAct);createPopupMenu() 関数は、メインウィンドウがコンテキストメニューイベントを受信した際にポップアップメニューを生成します。デフォルトの実装では、ドックウィジェットやツールバーのチェック可能なアクションを含むメニューが生成されます。カスタムメニューを作成するには、createPopupMenu() を再実装します。
ツールバーの作成
ツールバーは、QToolBar クラスで実装されています。addToolBar() を使用して、メインウィンドウにツールバーを追加します。
ツールバーの初期位置は、特定のQt::ToolBarArea に割り当てることで制御します。addToolBarBreak() またはinsertToolBarBreak() を使用して、ツールバーブレーク(テキスト編集における改行のようなもの)を挿入することで、領域を分割できます。また、QToolBar::setAllowedAreas()およびQToolBar::setMovable()を使用して、ユーザーによる配置を制限することもできます。
ツールバーアイコンのサイズは、iconSize() で取得できます。サイズはプラットフォームによって異なりますが、setIconSize() を使用して固定サイズを設定できます。setToolButtonStyle() を使用すると、ツールバー内のすべてのツールボタンの外観を変更できます。
ツールバーの作成例を以下に示します:
void MainWindow::createToolBars()
{
fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAct);ドックウィジェットの作成
ドックウィジェットは、QDockWidget クラスで実装されています。ドックウィジェットとは、メインウィンドウにドッキングできるウィンドウのことです。addDockWidget() を使用して、メインウィンドウにドックウィジェットを追加します。
Qt::DockWidgetArea 列挙型で定義されているように、ドックウィジェット領域は左(left)、右(right)、上(top)、下(bottom)の4つがあります。setCorner() を使用すると、領域が重なる角の部分をどのドックウィジェット領域が占めるかを指定できます。デフォルトでは、各領域にはドックウィジェットの行(縦または横)を1つしか配置できませんが、setDockNestingEnabled() でネストを有効にすると、ドックウィジェットをどちらの方向にも追加できるようになります。
また、2つのドックウィジェットを上下に積み重ねることも可能です。その場合、QTabBar を使用して、どちらのウィジェットを表示するかを指定します。
以下に、ドックウィジェットを作成し、メインウィンドウに追加する方法の例を示します。
QDockWidget *dockWidget = new QDockWidget(tr("Dock Widget"), this);
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea |
Qt::RightDockWidgetArea);
dockWidget->setWidget(dockWidgetContents);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);ステータスバー
setStatusBar() を使用してステータスバーを設定できますが、statusBar() (メインウィンドウのステータスバーを返す)が最初に呼び出された際に自動的に作成されます。その使用方法については、QStatusBar を参照してください。
状態の保存
QMainWindowは、saveState() を使用してレイアウトの状態を保存でき、後でrestoreState() を使用してそれを取得できます。保存されるのは、ツールバーおよびドックウィジェットの位置とサイズ(メインウィンドウのサイズに対する相対値)です。
セキュリティ上の考慮事項
restoreState() 関数は、ツールバーおよびドックウィジェットのレイアウトを記述するバージョン付きバイナリブロブを逆シリアル化します。これには、分割ドック領域やタブ付きドック領域の再帰的にネストされたツリー構造も含まれます。 このフォーマットのマジックマーカーとバージョンは検証されますが、外側の構造が受け入れられた後は、ドック領域のインデックスやネストされたレイアウトツリーの深さなどの個々のフィールドについて、メインウィンドウの実際の構成に対する境界チェックは行われません。
restoreState() には、saveState() によって以前に生成され、同じバージョンまたは互換性のあるバージョンのアプリケーションによって(通常はQSettings を通じて)永続化されたQByteArray のみを渡してください。ネットワークからダウンロードしたファイル、同期または共有された設定ファイル、あるいはセキュリティが侵害されている可能性のある別のアプリケーションから提供されたデータなど、出所が不明または信頼できないデータを使用してrestoreState() を呼び出さないでください。
関連項目として、 QMenuBar 、QToolBar 、QStatusBar 、QDockWidget 、および「メニューの例」を参照してください 。
メンバ型のドキュメント
enum QMainWindow::DockOption
flags QMainWindow::DockOptions
この列挙型には、QMainWindow のドッキング動作を指定するフラグが含まれています。
| 定数 | 値 | 説明 |
|---|---|---|
QMainWindow::AnimatedDocks | 0x01 | animated プロパティと同じです。 |
QMainWindow::AllowNestedDocks | 0x02 | dockNestingEnabled プロパティと同じです。 |
QMainWindow::AllowTabbedDocks | 0x04 | ユーザーは、あるドックウィジェットを別のドックウィジェットの「上に」ドロップすることができます。2つのウィジェットは積み重ねられ、どちらを表示するかを選択するためのタブバーが表示されます。 |
QMainWindow::ForceTabbedDocks | 0x08 | 各ドック領域には、タブ付きドックウィジェットのスタックが 1 つだけ含まれます。つまり、ドック領域内でドックウィジェットを隣り合わせに配置することはできません。このオプションが設定されている場合、AllowNestedDocks は無効になります。 |
QMainWindow::VerticalTabs | 0x10 | メインウィンドウの両側にある2つの垂直ドック領域では、タブが縦方向に表示されます。このオプションが設定されていない場合、すべてのドック領域でタブは下部に表示されます。AllowTabbedDocksを暗黙的に指定します。setTabPosition()も参照してください。 |
QMainWindow::GroupedDragging | 0x20 | ドックのタイトルバーをドラッグすると、そのドックにタブで関連付けられているすべてのタブが一緒にドラッグされます。AllowTabbedDocks を暗黙的に前提とします。一部の QDockWidget に配置可能な領域に制限がある場合、正常に動作しないことがあります。(この列挙型値は Qt 5.6 で追加されました。) |
これらのオプションは、QMainWindow へのドックウィジェットのドロップ方法を制御するのみです。指定されたオプションに合わせてドックウィジェットの配置を再配置することはありません。このため、これらのオプションは、メインウィンドウにドックウィジェットを追加する前に設定する必要があります。ただし、AnimatedDocks および VerticalTabs オプションは例外であり、これらはいつでも設定可能です。
DockOptions 型は、QFlags<DockOption> の typedef です。これは、DockOption 値の OR 結合を格納します。
プロパティのドキュメント
animated : bool
このプロパティは、ドックウィジェットやツールバーの操作にアニメーション効果を適用するかどうかを指定します
ドックウィジェットやツールバーがメインウィンドウ上にドラッグされると、メインウィンドウはその内容を調整し、ドロップされた場合にドックウィジェットやツールバーがどこにドッキングされるかを示します。このプロパティを設定すると、QMainWindow は内容を滑らかなアニメーションで移動させます。このプロパティをクリアすると、内容は新しい位置にスナップします。
デフォルトでは、このプロパティは有効になっています。メインウィンドウに、サイズ変更や再描画に時間がかかるウィジェットが含まれている場合は、このプロパティを無効にすることができます。
このプロパティを設定することは、setDockOptions() を使用して `AnimatedDocks ` オプションを設定することと同じです。
アクセス関数:
| bool | isAnimated() const |
| void | setAnimated(bool enabled) |
dockNestingEnabled : bool
このプロパティは、ドックをネストできるかどうかを指定します
このプロパティがfalse に設定されている場合、ドック領域にはドックウィジェットが1行(水平または垂直)のみ配置できます。このプロパティがtrue に設定されている場合、ドックウィジェットが占める領域をどちらの方向にも分割して、より多くのドックウィジェットを配置することができます。
ドックのネストは、多数のドックウィジェットを含むアプリケーションでのみ必要です。これにより、ユーザーはメインウィンドウの配置をより自由に調整できるようになります。 ただし、ドックウィジェットをメインウィンドウ上にドラッグした際、ドロップされたドックウィジェットがドック領域に配置される方法が複数存在するため、ドックのネストは動作をより複雑(かつ直感的でない)なものにしてしまいます。
このプロパティの設定は、setDockOptions() を使用してAllowNestedDocks オプションを設定することと同じです。
アクセス関数:
| bool | isDockNestingEnabled() const |
| void | setDockNestingEnabled(bool enabled) |
dockOptions : DockOptions
このプロパティは、QMainWindow
デフォルト値はAnimatedDocks |AllowTabbedDocks です。
アクセス関数:
| QMainWindow::DockOptions | dockOptions() const |
| void | setDockOptions(QMainWindow::DockOptions options) |
documentMode : bool
このプロパティは、タブ付きドックウィジェットのタブバーがドキュメントモードに設定されているかどうかを表します。
デフォルト値は false です。
アクセス関数:
| bool | documentMode() const |
| void | setDocumentMode(bool enabled) |
QTabBar::documentModeも参照してください 。
iconSize : QSize
このメインウィンドウにおけるツールバーアイコンのサイズ。
デフォルトは、GUIスタイルのデフォルトのツールバーアイコンサイズです。アイコンは縮小されるのみであるため、使用するアイコンはこのサイズ以上である必要があることに注意してください。
アクセス関数:
| QSize | iconSize() const |
| void | setIconSize(const QSize &iconSize) |
tabShape : QTabWidget::TabShape
このプロパティは、タブ付きドックウィジェットで使用されるタブの形状を保持します。
デフォルト値は `QTabWidget::Rounded` です。
アクセス関数:
| QTabWidget::TabShape | tabShape() const |
| void | setTabShape(QTabWidget::TabShape tabShape) |
関連項目: setTabPosition()。
toolButtonStyle : Qt::ToolButtonStyle
このメインウィンドウのツールバーボタンのスタイル。
ツールボタンのスタイルをシステム設定に従わせるには、このプロパティをQt::ToolButtonFollowStyle に設定します。Unixでは、デスクトップ環境のユーザー設定が使用されます。その他のプラットフォームでは、Qt::ToolButtonFollowStyle は「アイコンのみ」を意味します。
デフォルトは `Qt::ToolButtonIconOnly` です。
アクセス関数:
| Qt::ToolButtonStyle | toolButtonStyle() const |
| void | setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle) |
unifiedTitleAndToolBarOnMac : bool
このプロパティは、ウィンドウが macOS で統一されたタイトルバーとツールバーの外観を使用しているかどうかを示します
なお、Qt 5 の実装には、Qt 4 と比較していくつかの制限があります:
- OpenGL コンテンツを含むウィンドウでの使用はサポートされていません。これには `QOpenGLWidget` が含まれます。
- ドッキング可能または移動可能なツールバーを使用すると、描画エラーが発生する可能性があるため、推奨されません
アクセス関数:
| bool | unifiedTitleAndToolBarOnMac() const |
| void | setUnifiedTitleAndToolBarOnMac(bool set) |
メンバ関数のドキュメント
[explicit] QMainWindow::QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
指定されたparent と、指定されたウィジェットflags を使用して、QMainWindowを構築します。
QMainWindowはQt::Window フラグを自動的に設定するため、常にトップレベルウィジェットとして作成されます。
[virtual noexcept] QMainWindow::~QMainWindow()
メインウィンドウを閉じます。
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)
メインウィンドウ内の指定されたarea に、指定されたdockwidget を追加します。
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)
指定された `area ` に、`orientation` で指定された方向で `dockwidget ` を追加します。
void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)
このメインウィンドウの指定されたarea に、toolbar を追加します。toolbar は、現在のツールバーブロック(つまり行)の末尾に配置されます。メインウィンドウがすでにtoolbar を管理している場合は、ツールバーをarea に移動するだけです。
insertToolBar()、addToolBarBreak()、およびinsertToolBarBreak()も参照してください 。
void QMainWindow::addToolBar(QToolBar *toolbar)
addToolBar(Qt::TopToolBarArea,toolbar) を呼び出すのと同じです
これはオーバーロードされた関数です。
QToolBar *QMainWindow::addToolBar(const QString &title)
QToolBar オブジェクトを作成し、そのウィンドウタイトルを「title 」に設定して、最上部のツールバー領域に挿入します。
これはオーバーロードされた関数です。
setWindowTitle()も参照してください 。
void QMainWindow::addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea)
指定されたarea に、存在する他のすべてのオブジェクトの後にツールバー区切りを追加します。
QWidget *QMainWindow::centralWidget() const
メインウィンドウの中心ウィジェットを返します。この関数は、中心ウィジェットが設定されていない場合、nullptr を返します。
setCentralWidget()も参照してください 。
[override virtual protected] void QMainWindow::contextMenuEvent(QContextMenuEvent *event)
QWidget::contextMenuEvent(QContextMenuEvent *event) を再実装します。
Qt::DockWidgetArea QMainWindow::corner(Qt::Corner corner) const
指定されたcorner を占有するドックウィジェット領域を返します。
setCorner()も参照してください 。
[virtual] QMenu *QMainWindow::createPopupMenu()
メインウィンドウに存在するツールバーおよびドックウィジェットのチェック可能な項目を含むポップアップメニューを返します。ツールバーやドックウィジェットが存在しない場合、この関数はnullptr を返します。
デフォルトでは、ユーザーがコンテキストメニューをアクティブにしたとき(通常はツールバーやドックウィジェットを右クリックしたとき)、メインウィンドウによってこの関数が呼び出されます。
カスタムポップアップメニューを作成したい場合は、この関数を再実装し、新しく作成したポップアップメニューを返してください。ポップアップメニューの所有権は呼び出し元に引き渡されます。
addDockWidget()、addToolBar()、およびmenuBar()も参照してください 。
Qt::DockWidgetArea QMainWindow::dockWidgetArea(QDockWidget *dockwidget) const
dockwidget のQt::DockWidgetArea を返します。dockwidget がメインウィンドウに追加されていない場合、この関数はQt::NoDockWidgetArea を返します。
addDockWidget()、splitDockWidget()、およびQt::DockWidgetAreaも参照してください 。
[override virtual protected] bool QMainWindow::event(QEvent *event)
QWidget::event(QEvent *event) を再実装します。
[signal] void QMainWindow::iconSizeChanged(const QSize &iconSize)
このシグナルは、ウィンドウで使用されるアイコンのサイズが変更されたときに発火します。新しいアイコンのサイズは、iconSize に渡されます。
このシグナルを他のコンポーネントに接続することで、アプリケーションの外観の一貫性を保つことができます。
setIconSize()も参照してください 。
void QMainWindow::insertToolBar(QToolBar *before, QToolBar *toolbar)
toolbar を、before ツールバーが占める領域に挿入し、その前に表示されるようにします。たとえば、通常の左から右へのレイアウト操作では、これにより、水平ツールバー領域において、toolbar がbefore で指定されたツールバーの左側に表示されることになります。
insertToolBarBreak()、addToolBar()、およびaddToolBarBreak()も参照してください 。
void QMainWindow::insertToolBarBreak(QToolBar *before)
before で指定されたツールバーの前に、ツールバー区切りを挿入します。
QMenuBar *QMainWindow::menuBar() const
メインウィンドウのメニューバーを返します。この関数は、メニューバーが存在しない場合、空のメニューバーを作成して返します。
Macアプリケーション内のすべてのウィンドウで1つのメニューバーを共有したい場合は、この関数を使用してメニューバーを作成しないでください。この関数で作成されたメニューバーは、QMainWindow を親として持つことになるためです。代わりに、親を持たないメニューバーを作成し、それをすべてのMacウィンドウで共有する必要があります。親を持たないメニューバーは、次のように作成します:
setMenuBar()も参照してください 。
QWidget *QMainWindow::menuWidget() const
メインウィンドウのメニューバーを返します。この関数は、メニューバーがまだ構築されていない場合、null を返します。
setMenuWidget()も参照してください 。
void QMainWindow::removeDockWidget(QDockWidget *dockwidget)
メインウィンドウのレイアウトから「dockwidget 」を削除し、非表示にします。なお、「dockwidget 」は削除されませんのでご注意ください。
void QMainWindow::removeToolBar(QToolBar *toolbar)
メインウィンドウのレイアウトから「toolbar 」を削除し、非表示にします。なお、「toolbar 」は削除されませんのでご注意ください。
void QMainWindow::removeToolBarBreak(QToolBar *before)
before で指定されたツールバーの前に以前に挿入されたツールバー区切りを削除します。
void QMainWindow::resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)
リスト `docks ` 内のドックウィジェットのサイズを、リスト `sizes` に記載された対応するピクセルサイズに合わせて変更します。orientation が `Qt::Horizontal` の場合、ドックウィジェットの幅を調整し、それ以外の場合は高さを調整します。サイズ調整の際には、最大サイズと最小サイズが守られるように調整され、QMainWindow 自体のサイズは変更されません。 余剰スペースや不足スペースは、各ウィジェットのサイズに対する相対的な割合に応じて、ウィジェット間で配分されます。
例:
resizeDocks({blueWidget, yellowWidget}, {20 , 40}, Qt::Horizontal);青と黄色のウィジェットが同じレベルでネストされている場合、yellowWidgetがblueWidgetの2倍の大きさになるようにサイズが調整されます。
一部のウィジェットがタブにグループ化されている場合、グループごとに1つのウィジェットのみを指定する必要があります。リストに含まれていないウィジェットは、制約を満たすように変更される場合があります。
bool QMainWindow::restoreDockWidget(QDockWidget *dockwidget)
restoreState() の呼び出し後にdockwidget が作成された場合、その状態を復元します。状態が復元された場合はtrue を返し、そうでない場合はfalse を返します。
restoreState() およびsaveState()も参照してください 。
bool QMainWindow::restoreState(const QByteArray &state, int version = 0)
このメインウィンドウのツールバーおよびドックウィジェットのstate を復元します。また、コーナーの設定も復元します。version の数値は、state に保存されている数値と比較されます。これらが一致しない場合、メインウィンドウの状態は変更されず、この関数はfalse を返します。一致する場合は、状態が復元され、この関数はtrue を返します。
QSettings を使用して保存されたジオメトリを復元するには、次のようなコードを使用できます:
void MainWindow::readSettings()
{
QSettings settings("MyCompany", "MyApp");
restoreGeometry(settings.value("myWidget/geometry").toByteArray());
restoreState(settings.value("myWidget/windowState").toByteArray());
}saveState()、QWidget::saveGeometry()、QWidget::restoreGeometry()、およびrestoreDockWidget()も参照してください 。
QByteArray QMainWindow::saveState(int version = 0) const
このメインウィンドウのツールバーおよびドックウィジェットの現在の状態を保存します。これには、setCorner() で設定可能なコーナー設定も含まれます。version の番号は、データの一部として保存されます。
objectName プロパティは、各QToolBar およびQDockWidget を識別するために使用されます。このプロパティは、メインウィンドウ(QToolBar )およびそのウィンドウ内の各ウィンドウ(QDockWidget )に対して一意であることを確認してください。QMainWindow
保存された状態を復元するには、戻り値とversion の番号をrestoreState()に渡してください。
ウィンドウが閉じられたときにジオメトリを保存するには、次のように close イベントを実装できます。
void MyMainWindow::closeEvent(QCloseEvent *event)
{
QSettings settings("MyCompany", "MyApp");
settings.setValue("geometry", saveGeometry());
settings.setValue("windowState", saveState());
QMainWindow::closeEvent(event);
}restoreState()、QWidget::saveGeometry()、およびQWidget::restoreGeometry()も参照してください 。
void QMainWindow::setCentralWidget(QWidget *widget)
指定されたwidget をメインウィンドウの中央ウィジェットとして設定します。
注:QMainWindow はwidget ポインタの所有権を取得し、適切なタイミングでそれを削除します。
centralWidget()も参照してください 。
void QMainWindow::setCorner(Qt::Corner corner, Qt::DockWidgetArea area)
指定されたドックウィジェットarea を、指定されたcorner に配置するように設定します。
corner()も参照してください 。
void QMainWindow::setMenuBar(QMenuBar *menuBar)
メインウィンドウのメニューバーをmenuBar に設定します。
注:QMainWindow は、menuBar ポインタの所有権を取得し、適切なタイミングでそれを削除します。
menuBar()も参照してください 。
void QMainWindow::setMenuWidget(QWidget *menuBar)
メインウィンドウのメニューバーを「menuBar 」に設定します。
QMainWindow menuBar ポインタの所有権を取得し、適切なタイミングでそれを削除します。
menuWidget()も参照してください 。
void QMainWindow::setStatusBar(QStatusBar *statusbar)
メインウィンドウのステータスバーを「statusbar 」に設定します。
ステータスバーを `nullptr ` に設定すると、メインウィンドウからステータスバーが削除されます。なお、QMainWindow は `statusbar ` ポインタの所有権を取得し、適切なタイミングでそれを削除します。
statusBar()も参照してください 。
void QMainWindow::setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition)
指定されたドックウィジェットareas のタブの位置を、指定されたtabPosition に設定します。デフォルトでは、すべてのドック領域のタブは下部に表示されます。
注: VerticalTabs ドックオプションは 、このメソッドで設定されたタブの位置よりも優先されます。
関連項目: ` tabPosition()` および `setTabShape()`。
void QMainWindow::splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)
「first 」ドックウィジェットが占める領域を2つの部分に分け、「first 」ドックウィジェットを最初の部分に、「second 」ドックウィジェットを2番目の部分に配置します。
orientation は、領域の分割方法を指定します。「Qt::Horizontal 」の分割では、2番目のドックウィジェットが1番目の右側に配置され、「Qt::Vertical 」の分割では、2番目のドックウィジェットが1番目の下に配置されます。
注:first が現在タブ付きドック領域内にある場合、second はfirst の隣ではなく、新しいタブとして追加されます。これは、1つのタブに格納できるドックウィジェットが1つだけであるためです。
注:Qt::LayoutDirection は、分割された領域の2つの部分におけるドックウィジェットの順序に影響を与えます。レイアウト方向が「右から左」に設定されている場合、ドックウィジェットの配置順序は逆になります。
関連項目: tabifyDockWidget()、addDockWidget()、およびremoveDockWidget()。
QStatusBar *QMainWindow::statusBar() const
メインウィンドウのステータスバーを返します。この関数は、ステータスバーが存在しない場合、空のステータスバーを作成して返します。
setStatusBar()も参照してください 。
QTabWidget::TabPosition QMainWindow::tabPosition(Qt::DockWidgetArea area) const
area のタブ位置を返します。
注: VerticalTabs ドックオプションは 、この関数が返すタブ位置よりも優先されます。
関連項目: setTabPosition() およびtabShape()。
[signal] void QMainWindow::tabifiedDockWidgetActivated(QDockWidget *dockWidget)
このシグナルは、タブが選択されてタブ形式のドックウィジェットがアクティブになったときに発火します。アクティブになったドックウィジェットは、dockWidget に渡されます。
tabifyDockWidget() およびtabifiedDockWidgets()も参照してください 。
QList<QDockWidget *> QMainWindow::tabifiedDockWidgets(QDockWidget *dockwidget) const
dockwidget と共にタブ化されたドックウィジェットを返します。
tabifyDockWidget()も参照してください 。
void QMainWindow::tabifyDockWidget(QDockWidget *first, QDockWidget *second)
second のドックウィジェットをfirst のドックウィジェットの上に移動させ、first の現在の位置にタブ付きドック領域を作成します。
この関数を呼び出す前に、両方のドックウィジェットが `addDockWidget()` を使用してメインウィンドウに追加されている必要があり、いずれのウィジェットもすでにタブ化されてはいけません。
tabifiedDockWidgets() およびaddDockWidget()も参照してください 。
QWidget *QMainWindow::takeCentralWidget()
このメインウィンドウから中央のウィジェットを削除します。
削除されたウィジェットの所有権は、呼び出し元に引き渡されます。
Qt::ToolBarArea QMainWindow::toolBarArea(const QToolBar *toolbar) const
toolbar のQt::ToolBarArea を返します。toolbar がメインウィンドウに追加されていない場合、この関数はQt::NoToolBarArea を返します。
addToolBar()、addToolBarBreak()、およびQt::ToolBarAreaも参照してください 。
bool QMainWindow::toolBarBreak(QToolBar *toolbar) const
toolbar の直前にツールバーの区切りがあるかどうかを返します。
addToolBarBreak() およびinsertToolBarBreak()も参照してください 。
[signal] void QMainWindow::toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle)
このシグナルは、ウィンドウ内のツールボタンに使用されるスタイルが変更されたときに発火します。新しいスタイルは、toolButtonStyle に渡されます。
このシグナルを他のコンポーネントに接続することで、アプリケーションの外観の一貫性を保つことができます。
setToolButtonStyle()も参照してください 。
© 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.