Класс QMdiArea
Виджет QMdiArea предоставляет область для отображения окон в режиме MDI. Подробнее...
| Заголовок: | #include <QMdiArea> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследует: | QAbstractScrollArea |
Типы
| перечисление | AreaOption { НеМаксимизироватьПодОкноПриАктивации } |
| флаги | AreaOptions |
| перечисление | ViewMode { РежимПодОкна, РежимВкладок } |
| перечисление | WindowOrder { ПорядокСоздание, ПорядокУкладки, ПорядокАктивации } |
Свойства
|
|
Открытые функции
| 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 |
Защищенные слоты
| виртуальный void | setupViewport(QWidget *viewport) override |
Подробное описание
Функции QMdiArea, по сути, работают как менеджер окон для окон MDI. Например, он рисует управляемые им окна на себе и организует их в каскадном или мозаичном порядке. QMdiArea обычно используется в качестве центрального виджета в QMainWindow для создания MDI-приложений, но также может быть размещен в любом макете. Следующий код добавляет область в главное окно:
QMainWindow *mainWindow = new QMainWindow;
mainWindow->setCentralWidget(mdiArea); В отличие от менеджеров окон для окон верхнего уровня, все флаги окна (Qt::WindowFlags) поддерживаются QMdiArea, если только флаги поддерживаются текущей стилизованной частью. Если конкретный флаг не поддерживается стилем (например, WindowShadeButtonHint), вы все равно можете затемнить окно с помощью showShaded().
Подокна в QMdiArea являются экземплярами QMdiSubWindow. Они добавляются в область MDI с помощью addSubWindow(). Обычно в эту функцию передается QWidget, который устанавливается как внутренний виджет, но также можно передать QMdiSubWindow напрямую. Класс наследует QWidget, и при программировании вы можете использовать тот же API, что и с обычным окном верхнего уровня. QMdiSubWindow также имеет поведение, специфичное для окон MDI. Подробнее см. описание класса QMdiSubWindow.
Подокно становится активным, когда получает фокус клавиатуры или когда вызывается setFocus(). Пользователь активирует окно обычным способом. Область MDI излучает сигнал subWindowActivated() при изменении активного окна, а функция activeSubWindow() возвращает активное под окно.
Функция subWindowList() возвращает список всех подокон. Например, эта информация может использоваться в всплывающем меню, содержащем список окон.
Подокна сортируются по текущему WindowOrder. Это используется для subWindowList(), а также для activateNextSubWindow() и activatePreviousSubWindow(). Кроме того, используется при каскадном или мозаичном размещении окон с помощью cascadeSubWindows() и tileSubWindows().
QMdiArea предоставляет две встроенные стратегии макета для подокон: cascadeSubWindows() и tileSubWindows(). Обе являются слотами и легко подключаются к пунктам меню.
Примечание: Значение свойства полосы прокрутки по умолчанию для QMdiArea — Qt::ScrollBarAlwaysOff.
См. также QMdiSubWindow.
Документация типов членов
перечисление QMdiArea::AreaOptionфлаги QMdiArea::AreaOptions
Это перечисление описывает параметры, которые настраивают поведение QMdiArea.
| Постоянная | Значение | Описание |
|---|---|---|
QMdiArea::DontMaximizeSubWindowOnActivation |
0x1 |
Когда активное подокно максимизировано, по умолчанию максимизируется следующее активированное подокно. Установите этот параметр, если вы не хотите этого поведения. |
Тип AreaOptions — это псевдоним для QFlags<AreaOption>. Он хранит результат объединения по оператору ИЛИ значений AreaOption.
перечисление QMdiArea::ViewMode
Это перечисление описывает режим отображения области; т. е. как будут отображаться подокна.
| Постоянная | Значение | Описание |
|---|---|---|
QMdiArea::SubWindowView |
0 |
Подокна отображаются с рамками окон (по умолчанию). |
QMdiArea::TabbedView |
1 |
Подокна отображаются с вкладками в панели вкладок. |
См. также setViewMode().
перечисление QMdiArea::WindowOrder
Определяет критерии, используемые для упорядочивания списка дочерних окон, возвращаемых функцией subWindowList(). Функции cascadeSubWindows() и tileSubWindows() следуют этому порядку при расположении окон.
| Постоянная | Значение | Описание |
|---|---|---|
QMdiArea::CreationOrder |
0 |
Окна возвращаются в порядке их создания. |
QMdiArea::StackingOrder |
1 |
Окна возвращаются в порядке их размещения, при этом верхнее окно оказывается последним в списке. |
QMdiArea::ActivationHistoryOrder |
2 |
Окна возвращаются в порядке их активации. |
См. также subWindowList().
END_OF_DOCUMENT_MARKERДокументация по свойствам
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.
void QMdiArea::activateNextSubWindow()
Передає фокус клавиатуры другому окну в списке дочерних окон. Активированным окном будет следующее, определяемое текущим порядком активации.
См. также activatePreviousSubWindow() и QMdiArea::WindowOrder.
void QMdiArea::activatePreviousSubWindow()
Передає фокус клавиатуры другому окну в списку дочерних окон. Активированным окном будет попереднє, определяемое текущим порядком активації.
См. также activateNextSubWindow() и QMdiArea::WindowOrder.
void QMdiArea::cascadeSubWindows()
Располагает все дочерние окна в виде каскада.
См. также tileSubWindows().
void QMdiArea::closeActiveSubWindow()
Закрывает активное дочернее окно.
См. также closeAllSubWindows().
void QMdiArea::closeAllSubWindows()
Закрывает все дочерние окна, отправив QCloseEvent в каждое окно. Вы можете получить сигналы subWindowActivated() от дочерних окон перед их закрытием (если область MDI активирует дочернее окно при закрытии другого).
Дочерние окна, которые игнорируют событие закрытия, останутся открытыми.
См. также closeActiveSubWindow().
void QMdiArea::setActiveSubWindow(QMdiSubWindow *window)
Активирует дочернее окно window. Если window равен nullptr, любое текущее активное окно деактивируется.
См. также activeSubWindow().
void QMdiArea::setupViewport(QWidget *viewport)
Переопределяет: QAbstractScrollArea::setupViewport(QWidget *viewport).
Этот слот вызывается QAbstractScrollArea после вызова setViewport(). Переопределите эту функцию в подклассе QMdiArea, чтобы инициализировать новый viewport перед его использованием.
См. также setViewport().
void QMdiArea::subWindowActivated(QMdiSubWindow *window)
QMdiArea излучает этот сигнал после активации window. Когда window равно nullptr, QMdiArea только что деактивировал последнее активное окно, и на рабочем пространстве нет активных окон.
См. также QMdiArea::activeSubWindow().
void QMdiArea::tileSubWindows()
Располагает все дочерние окна в виде плитки.
См. также cascadeSubWindows().
QMdiArea::~QMdiArea()
Уничтожает область MDI.
END_OF_DOCUMENT_MARKERQMdiSubWindow *QMdiArea::activeSubWindow() const
Возвращает указатель на текущее активное подокно. Если активного окна нет, возвращается nullptr.
Поддокументы рассматриваются как окна верхнего уровня с точки зрения состояния окна, т. е., если активным окном является виджет, расположенный за пределами области MDI, ни одно подокно не будет активным. Обратите внимание, что если виджет в окне, в котором расположена область MDI, получит фокус, окно будет активировано.
См. также setActiveSubWindow() и Qt::WindowState.
QMdiSubWindow *QMdiArea::addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags())
Добавляет widget в качестве нового подокна в область MDI. Если 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); При создании собственного подокна необходимо установить атрибут виджета Qt::WA_DeleteOnClose, если вы хотите, чтобы окно удалялось при закрытии в области MDI. В противном случае окно будет скрыто, а область MDI не активирует следующее подокно.
Возвращает QMdiSubWindow, добавленный в область MDI.
См. также removeSubWindow().
[override virtual protected] void QMdiArea::childEvent(QChildEvent *childEvent)
Переопределяет: QObject::childEvent(QChildEvent *event).
QMdiSubWindow *QMdiArea::currentSubWindow() const
Возвращает указатель на текущее подокно или nullptr, если текущего подокна нет.
Эта функция вернет то же значение, что и activeSubWindow(), если QApplication, содержащая QMdiArea, активна.
См. также 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)
Удаляет widget из области MDI. widget должен быть либо QMdiSubWindow, либо виджетом, являющимся внутренним виджетом подокна. Обратите внимание, что QMdiArea никогда не удаляет widget напрямую. Если передаётся 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).
void QMdiArea::setOption(QMdiArea::AreaOption option, bool on = true)
Если on равно true, option включён в области MDI; в противном случае он выключен. См. AreaOption для эффекта каждого параметра.
См. также AreaOption и testOption().
[override virtual protected] void QMdiArea::showEvent(QShowEvent *showEvent)
Переопределяет: QWidget::showEvent(QShowEvent *event).
[override virtual] QSize QMdiArea::sizeHint() const
Переопределяет: QAbstractScrollArea::sizeHint() const.
QList<QMdiSubWindow *> QMdiArea::subWindowList(QMdiArea::WindowOrder order = CreationOrder) const
Возвращает список всех поддокументов в области MDI. Если order равен CreationOrder (по умолчанию), окна упорядочены в порядке их вставки в рабочее пространство. Если order равен StackingOrder, окна перечислены в порядке их расположения в стеке, при этом верхнее окно является последним элементом списка. Если order равен ActivationHistoryOrder, окна перечислены в соответствии с их недавней историей активации.
См. также WindowOrder.
bool QMdiArea::testOption(QMdiArea::AreaOption option) const
Возвращает true, если option включён; в противном случае возвращает false.
См. также AreaOption и setOption().
[override virtual protected] void QMdiArea::timerEvent(QTimerEvent *timerEvent)
Переопределяет: QObject::timerEvent(QTimerEvent *event).
[override virtual protected] bool QMdiArea::viewportEvent(QEvent *event)
Переопределяет: QAbstractScrollArea::viewportEvent(QEvent *event).
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qmdiarea.html