Класс QMdiArea
Виджет QMdiArea предоставляет область для отображения окон в режиме MDI. Подробнее...
| Заголовок: | #include <QMdiArea> |
| qmake: | QT += widgets |
| С момента: | Qt 4.3 |
| Наследует: | QAbstractScrollArea |
Этот класс был представлен в Qt 4.3.
Типы публичного доступа
| Перечисление | AreaOption { DontMaximizeSubWindowOnActivation } |
| Флаги | 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 |
Защищённые слоты
| 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 |
Отображение подокон с вкладками в строке вкладок. |
Это перечисление было введено или изменено в Qt 4.4.
См. также setViewMode().
перечисление QMdiArea::WindowOrder
Указывает критерии для упорядочения списка дочерних окон, возвращаемых subWindowList(). Функции cascadeSubWindows() и tileSubWindows() следуют этому порядку при размещении окон.
| Константа | Значение | Описание |
|---|---|---|
QMdiArea::CreationOrder |
0 |
Окна возвращаются в порядке их создания. |
QMdiArea::StackingOrder |
1 |
Окна возвращаются в порядке их стекирования, причём верхнее окно находится последним в списке. |
QMdiArea::ActivationHistoryOrder |
2 |
Окна возвращаются в порядке их активации. |
См. также subWindowList().
Документация свойств
activationOrder : WindowOrder
Это свойство определяет порядок сортировки списков дочерних окон.
Это свойство задаёт порядок сортировки списка дочерних окон, возвращаемых методом subWindowList(). По умолчанию используется порядок создания окон.
Это свойство было введено в Qt 4.4.
Функции доступа:
| QMdiArea::WindowOrder | activationOrder() const |
| void | setActivationOrder(QMdiArea::WindowOrder order) |
См. также subWindowList().
background : QBrush
Это свойство содержит кисть фона для области рабочего пространства.
Это свойство задаёт кисть фона для самой области рабочего пространства. По умолчанию используется серый цвет, но может быть любой кистью (например, цвета, градиенты или растровые изображения).
Функции доступа:
| QBrush | background() const |
| void | setBackground(const QBrush &background) |
documentMode : bool
Это свойство определяет, установлен ли режим документа для панели вкладок в режиме отображения вкладок.
Режим документа по умолчанию отключен.
Это свойство было введено в Qt 4.5.
Функции доступа:
| bool | documentMode() const |
| void | setDocumentMode(bool enabled) |
См. также QTabBar::documentMode и setViewMode().
tabPosition : QTabWidget::TabPosition
Это свойство определяет положение вкладок в режиме отображения вкладок.
Возможные значения для этого свойства описаны в перечислении QTabWidget::TabPosition.
Это свойство было введено в Qt 4.4.
Функции доступа:
| QTabWidget::TabPosition | tabPosition() const |
| void | setTabPosition(QTabWidget::TabPosition position) |
См. также QTabWidget::TabPosition и setViewMode().
tabShape : QTabWidget::TabShape
Это свойство определяет форму вкладок в режиме отображения вкладок.
Возможные значения для этого свойства: QTabWidget::Rounded (по умолчанию) или QTabWidget::Triangular.
Это свойство было введено в Qt 4.4.
Функции доступа:
| QTabWidget::TabShape | tabShape() const |
| void | setTabShape(QTabWidget::TabShape shape) |
См. также QTabWidget::TabShape и setViewMode().
tabsClosable : bool
Это свойство определяет, должны ли кнопки закрытия отображаться на каждой вкладке в режиме отображения вкладок.
Вкладки по умолчанию не закрываются.
Это свойство было введено в Qt 4.8.
Функции доступа:
| bool | tabsClosable() const |
| void | setTabsClosable(bool closable) |
См. также QTabBar::tabsClosable и setViewMode().
tabsMovable : bool
Это свойство определяет, может ли пользователь перемещать вкладки в области вкладок в режиме отображения вкладок.
Вкладки по умолчанию не перемещаются.
Это свойство было введено в Qt 4.8.
Функции доступа:
| bool | tabsMovable() const |
| void | setTabsMovable(bool movable) |
См. также QTabBar::movable и setViewMode().
viewMode : ViewMode
Это свойство определяет способ отображения дочерних окон в QMdiArea.
По умолчанию используется SubWindowView для отображения дочерних окон.
Это свойство было введено в Qt 4.4.
Функции доступа:
| 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().
[slot] void QMdiArea::tileSubWindows()
Располагает все дочерние окна в виде плитки.
См. также cascadeSubWindows().
[virtual] QMdiArea::~QMdiArea()
Удаляет область MDI.
QMdiSubWindow *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 как внутренний виджет).
Примечание: После добавления под-окна его родителем будет viewport 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-5.15/qmdiarea.html