Класс QMdiArea
Виджет QMdiArea предоставляет область для отображения окон MDI. Подробнее...
| Заголовок: | #include <QMdiArea> |
| qmake: | QT += widgets |
| С момента: | Qt 4.3 |
| Наследует: | QAbstractScrollArea |
Этот класс был представлен в Qt 4.3.
Типы публичного доступа
| перечисление | AreaOption { DontMaximizeSubWindowOnActivation } |
| флаги | AreaOptions |
| перечисление | ViewMode { SubWindowView, TabbedView } |
| перечисление | WindowOrder { CreationOrder, StackingOrder, ActivationHistoryOrder } |
Свойства
|
|
Открытые функции
| 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::AreaOptionflags 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().
END_OF_DOCUMENT_MARKERДокументация свойств
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()
Передает фокус клавиатуры другому окну в списке дочерних окон. Активированное окно будет следующим, определенным текущим порядком активации activation order.
См. также activatePreviousSubWindow() и QMdiArea::WindowOrder.
void QMdiArea::activatePreviousSubWindow()
Передает фокус клавиатуры другому окну в списке дочерних окон. Активированное окно будет предыдущим, определенным текущим порядком активации activation order.
См. также 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 равен 0, 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)
[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.13/qmdiarea.html