Класс QMdiArea
Виджет QMdiArea предоставляет область для отображения окон в стиле MDI. Подробнее...
| Заголовок: | #include <QMdiArea> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследует: | QAbstractScrollArea |
Общедоступные типы
| Перечисление | AreaOption { DontMaximizeSubWindowOnActivation } |
| Флаги | AreaOptions |
| Перечисление | ViewMode { SubWindowView, TabbedView } |
| Перечисление | 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 |
Защищенные слоты
| virtual 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, либо виджетом, являющимся внутренним виджетом подокна. Обратите внимание, что 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).
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.1/qmdiarea.html