File indexing completed on 2026-09-16 09:23:46
0001
0002
0003
0004
0005 #ifndef QDYNAMICMAINWINDOW_H
0006 #define QDYNAMICMAINWINDOW_H
0007
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtWidgets/qwidget.h>
0010 #if QT_CONFIG(tabwidget)
0011 #include <QtWidgets/qtabwidget.h>
0012 #endif
0013
0014 QT_REQUIRE_CONFIG(mainwindow);
0015
0016 QT_BEGIN_NAMESPACE
0017
0018 class QDockWidget;
0019 class QMainWindowPrivate;
0020 class QMenuBar;
0021 class QStatusBar;
0022 class QToolBar;
0023 class QMenu;
0024
0025 class Q_WIDGETS_EXPORT QMainWindow : public QWidget
0026 {
0027 Q_OBJECT
0028
0029 Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
0030 Q_PROPERTY(Qt::ToolButtonStyle toolButtonStyle READ toolButtonStyle WRITE setToolButtonStyle)
0031 #if QT_CONFIG(dockwidget)
0032 Q_PROPERTY(bool animated READ isAnimated WRITE setAnimated)
0033 #if QT_CONFIG(tabbar)
0034 Q_PROPERTY(bool documentMode READ documentMode WRITE setDocumentMode)
0035 #endif
0036 #if QT_CONFIG(tabwidget)
0037 Q_PROPERTY(QTabWidget::TabShape tabShape READ tabShape WRITE setTabShape)
0038 #endif
0039 Q_PROPERTY(bool dockNestingEnabled READ isDockNestingEnabled WRITE setDockNestingEnabled)
0040 #endif
0041 Q_PROPERTY(DockOptions dockOptions READ dockOptions WRITE setDockOptions)
0042 #if QT_CONFIG(toolbar)
0043 Q_PROPERTY(bool unifiedTitleAndToolBarOnMac READ unifiedTitleAndToolBarOnMac
0044 WRITE setUnifiedTitleAndToolBarOnMac)
0045 #endif
0046
0047 public:
0048 enum DockOption {
0049 AnimatedDocks = 0x01,
0050 AllowNestedDocks = 0x02,
0051 AllowTabbedDocks = 0x04,
0052 ForceTabbedDocks = 0x08,
0053 VerticalTabs = 0x10,
0054 GroupedDragging = 0x20
0055 };
0056 Q_ENUM(DockOption)
0057 Q_DECLARE_FLAGS(DockOptions, DockOption)
0058 Q_FLAG(DockOptions)
0059
0060 explicit QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
0061 ~QMainWindow();
0062
0063 QSize iconSize() const;
0064 void setIconSize(const QSize &iconSize);
0065
0066 Qt::ToolButtonStyle toolButtonStyle() const;
0067 void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle);
0068
0069 #if QT_CONFIG(dockwidget)
0070 bool isAnimated() const;
0071 bool isDockNestingEnabled() const;
0072 #endif
0073
0074 #if QT_CONFIG(tabbar)
0075 bool documentMode() const;
0076 void setDocumentMode(bool enabled);
0077 #endif
0078
0079 #if QT_CONFIG(tabwidget)
0080 QTabWidget::TabShape tabShape() const;
0081 void setTabShape(QTabWidget::TabShape tabShape);
0082 QTabWidget::TabPosition tabPosition(Qt::DockWidgetArea area) const;
0083 void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition);
0084 #endif
0085
0086 void setDockOptions(DockOptions options);
0087 DockOptions dockOptions() const;
0088
0089 bool isSeparator(const QPoint &pos) const;
0090
0091 #if QT_CONFIG(menubar)
0092 QMenuBar *menuBar() const;
0093 void setMenuBar(QMenuBar *menubar);
0094
0095 QWidget *menuWidget() const;
0096 void setMenuWidget(QWidget *menubar);
0097 #endif
0098
0099 #if QT_CONFIG(statusbar)
0100 QStatusBar *statusBar() const;
0101 void setStatusBar(QStatusBar *statusbar);
0102 #endif
0103
0104 QWidget *centralWidget() const;
0105 void setCentralWidget(QWidget *widget);
0106
0107 QWidget *takeCentralWidget();
0108
0109 #if QT_CONFIG(dockwidget)
0110 void setCorner(Qt::Corner corner, Qt::DockWidgetArea area);
0111 Qt::DockWidgetArea corner(Qt::Corner corner) const;
0112 #endif
0113
0114 #if QT_CONFIG(toolbar)
0115 void addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea);
0116 void insertToolBarBreak(QToolBar *before);
0117
0118 void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar);
0119 void addToolBar(QToolBar *toolbar);
0120 QToolBar *addToolBar(const QString &title);
0121 void insertToolBar(QToolBar *before, QToolBar *toolbar);
0122 void removeToolBar(QToolBar *toolbar);
0123 void removeToolBarBreak(QToolBar *before);
0124
0125 bool unifiedTitleAndToolBarOnMac() const;
0126
0127 Qt::ToolBarArea toolBarArea(const QToolBar *toolbar) const;
0128 bool toolBarBreak(QToolBar *toolbar) const;
0129 #endif
0130
0131 #if QT_CONFIG(dockwidget)
0132 void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget);
0133 void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget,
0134 Qt::Orientation orientation);
0135 void splitDockWidget(QDockWidget *after, QDockWidget *dockwidget,
0136 Qt::Orientation orientation);
0137 #if QT_CONFIG(tabbar)
0138 void tabifyDockWidget(QDockWidget *first, QDockWidget *second);
0139 QList<QDockWidget*> tabifiedDockWidgets(QDockWidget *dockwidget) const;
0140 #endif
0141 void removeDockWidget(QDockWidget *dockwidget);
0142 bool restoreDockWidget(QDockWidget *dockwidget);
0143
0144 Qt::DockWidgetArea dockWidgetArea(QDockWidget *dockwidget) const;
0145
0146 void resizeDocks(const QList<QDockWidget *> &docks,
0147 const QList<int> &sizes, Qt::Orientation orientation);
0148 #endif
0149
0150 QByteArray saveState(int version = 0) const;
0151 bool restoreState(const QByteArray &state, int version = 0);
0152
0153 #if QT_CONFIG(menu)
0154 virtual QMenu *createPopupMenu();
0155 #endif
0156
0157 public Q_SLOTS:
0158 #if QT_CONFIG(dockwidget)
0159 void setAnimated(bool enabled);
0160 void setDockNestingEnabled(bool enabled);
0161 #endif
0162 #if QT_CONFIG(toolbar)
0163 void setUnifiedTitleAndToolBarOnMac(bool set);
0164 #endif
0165
0166 Q_SIGNALS:
0167 void iconSizeChanged(const QSize &iconSize);
0168 void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle);
0169 #if QT_CONFIG(dockwidget)
0170 void tabifiedDockWidgetActivated(QDockWidget *dockWidget);
0171 #endif
0172
0173 protected:
0174 #ifndef QT_NO_CONTEXTMENU
0175 void contextMenuEvent(QContextMenuEvent *event) override;
0176 #endif
0177 bool event(QEvent *event) override;
0178
0179 private:
0180 Q_DECLARE_PRIVATE(QMainWindow)
0181 Q_DISABLE_COPY(QMainWindow)
0182 friend class QDockWidgetGroupWindow;
0183 };
0184
0185 Q_DECLARE_OPERATORS_FOR_FLAGS(QMainWindow::DockOptions)
0186
0187 QT_END_NAMESPACE
0188
0189 #endif