Класс QDockWidget
Класс QDockWidget предоставляет виджет, который может быть прикреплён внутри QMainWindow или отображаться как окно верхнего уровня на рабочем столе. Подробнее...
| Заголовок: | #include <QDockWidget> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследуется от: | QWidget |
Типы публичного доступа
| Перечисление | DockWidgetFeature { DockWidgetClosable, DockWidgetMovable, DockWidgetFloatable, DockWidgetVerticalTitleBar, NoDockWidgetFeatures } |
| Флаги | DockWidgetFeatures |
Свойства
- allowedAreas : Qt::DockWidgetAreas
- features : DockWidgetFeatures
- floating : bool
- windowTitle : QString
Функции публичного доступа
| QDockWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) | |
| QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) | |
| virtual | ~QDockWidget() |
| Qt::DockWidgetAreas | allowedAreas() const |
| QDockWidget::DockWidgetFeatures | features() const |
| bool | isAreaAllowed(Qt::DockWidgetArea area) const |
| bool | isFloating() const |
| void | setAllowedAreas(Qt::DockWidgetAreas areas) |
| void | setFeatures(QDockWidget::DockWidgetFeatures features) |
| void | setFloating(bool floating) |
| void | setTitleBarWidget(QWidget *widget) |
| void | setWidget(QWidget *widget) |
| QWidget * | titleBarWidget() const |
| QAction * | toggleViewAction() const |
| QWidget * | widget() const |
Сигналы
| void | allowedAreasChanged(Qt::DockWidgetAreas allowedAreas) |
| void | dockLocationChanged(Qt::DockWidgetArea area) |
| void | featuresChanged(QDockWidget::DockWidgetFeatures features) |
| void | topLevelChanged(bool topLevel) |
| void | visibilityChanged(bool visible) |
Защищённые функции
| virtual void | initStyleOption(QStyleOptionDockWidget *option) const |
Переопределённые защищённые функции
| virtual void | changeEvent(QEvent *event) override |
| virtual void | closeEvent(QCloseEvent *event) override |
| virtual bool | event(QEvent *event) override |
| virtual void | paintEvent(QPaintEvent *event) override |
Подробное описание
QDockWidget предоставляет концепцию виджетов-панелей, также известных как панели инструментов или окна утилит. Окна панелей — это вторичные окна, размещённые в области виджетов-панелей вокруг центрального виджета (central widget) в QMainWindow.
Окна панелей могут перемещаться внутри текущей области, перемещаться в новые области и быть откреплёнными (например, отстыковать) пользователем. API QDockWidget позволяет программисту ограничить возможность перемещения, открепления и закрытия виджетов-панелей, а также области, в которых они могут быть размещены.
Внешний вид
QDockWidget состоит из панели заголовка и области содержимого. Панель заголовка отображает заголовок окна виджета-панели, кнопку открепления и кнопку закрытия. В зависимости от состояния QDockWidget кнопки открепления и закрытия могут быть либо отключены, либо вообще не отображаться.
Внешний вид панели заголовка и кнопок зависит от используемого стиля (style).
QDockWidget действует как обёртка для своего дочернего виджета, заданного с помощью setWidget(). Настраиваемые подсказки размера, минимальные и максимальные размеры и политики размера должны быть реализованы в дочернем виджете. QDockWidget будет их соблюдать, изменяя собственные ограничения, чтобы включать рамку и заголовок. Ограничения размера не должны быть заданы для самого QDockWidget, так как они изменяются в зависимости от того, прикреплён ли он; прикреплённый QDockWidget не имеет рамки и имеет меньшую панель заголовка.
Примечание: В macOS, если у QDockWidget есть родной дескриптор окна (например, если вызвана winId() или дочерний виджет), то из-за ограничения невозможно перетащить виджет-панель при откреплении. Начало перетаскивания открепит виджет-панель, но для перемещения самого виджета-панели потребуется второе перетаскивание.
См. также QMainWindow и Пример виджетов-панелей.
Документация по типам членов
перечисление QDockWidget::DockWidgetFeatureфлаги QDockWidget::DockWidgetFeatures
| Константа | Значение | Описание |
|---|---|---|
QDockWidget::DockWidgetClosable |
0x01 |
Виджет панели может быть закрыт. На некоторых системах виджет панели всегда имеет кнопку закрытия, когда он откреплён (например, в MacOS 10.5). |
QDockWidget::DockWidgetMovable |
0x02 |
Пользователь может перемещать виджет панели между панелями. |
QDockWidget::DockWidgetFloatable |
0x04 |
Виджет панели можно отсоединить от главного окна и отображать как независимое окно. |
QDockWidget::DockWidgetVerticalTitleBar |
0x08 |
Виджет панели отображает вертикальную панель заголовка слева. Это можно использовать для увеличения вертикального пространства в QMainWindow. |
QDockWidget::NoDockWidgetFeatures |
0x00 |
Виджет панели не может быть закрыт, перемещён или откреплён. |
Тип DockWidgetFeatures является типом-синонимом для QFlags<DockWidgetFeature>. Он хранит логическое ИЛИ сочетание значений DockWidgetFeature.
Документация по свойствам
allowedAreas : Qt::DockWidgetAreas
области, в которых может размещаться виджет док-панели
По умолчанию используется Qt::AllDockWidgetAreas.
Функции доступа:
| Qt::DockWidgetAreas | allowedAreas() const |
| void | setAllowedAreas(Qt::DockWidgetAreas areas) |
Сигнал уведомления:
| void | allowedAreasChanged(Qt::DockWidgetAreas allowedAreas) |
См. также Qt::DockWidgetArea.
features : DockWidgetFeatures
Это свойство указывает, можно ли перемещать, закрывать и откреплять виджет док-панели.
По умолчанию это свойство установлено в комбинацию DockWidgetClosable, DockWidgetMovable и DockWidgetFloatable.
Функции доступа:
| QDockWidget::DockWidgetFeatures | features() const |
| void | setFeatures(QDockWidget::DockWidgetFeatures features) |
Сигнал уведомления:
| void | featuresChanged(QDockWidget::DockWidgetFeatures features) |
См. также DockWidgetFeature.
floating : bool
Это свойство указывает, является ли виджет док-панели откреплённым.
Откреплённый виджет док-панели отображается пользователю как отдельное окно «сверху» родительского QMainWindow, вместо того, чтобы быть прикреплённым к QMainWindow.
По умолчанию это свойство равно true.
При изменении этого свойства излучается сигнал topLevelChanged().
Функции доступа:
| bool | isFloating() const |
| void | setFloating(bool floating) |
См. также isWindow() и topLevelChanged().
windowTitle : QString
Это свойство содержит заголовок виджета док-панели (подпись).
По умолчанию это свойство содержит пустую строку.
Функции доступа:
| QString | windowTitle() const |
| void | setWindowTitle(const QString &) |
Сигнал уведомления:
| void | windowTitleChanged(const QString &title) |
Документация по функциям-членам
QDockWidget::QDockWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
Конструирует QDockWidget с родителем parent и флагами окна flags. Виджет док-панели будет размещён в левой области виджета док-панели.
QDockWidget::QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
Конструирует QDockWidget с родителем parent и флагами окна flags. Виджет док-панели будет размещён в левой области виджета док-панели.
Заголовок окна устанавливается в title. Этот заголовок используется, когда QDockWidget прикреплён и откреплён. Он также используется в контекстном меню, предоставляемом QMainWindow.
См. также setWindowTitle().
[signal] void QDockWidget::allowedAreasChanged(Qt::DockWidgetAreas allowedAreas)
Этот сигнал излучается, когда изменяется свойство allowedAreas. Параметр allowedAreas содержит новое значение свойства.
Примечание: Сигнал уведомления для свойства allowedAreas.
[signal] void QDockWidget::dockLocationChanged(Qt::DockWidgetArea area)
Этот сигнал излучается, когда виджет док-панели перемещается в другую область док-панели area или перемещается в другое место в текущей области док-панели. Это происходит, когда виджет док-панели перемещается программно или перетаскивается пользователем в новое место.
[signal] void QDockWidget::featuresChanged(QDockWidget::DockWidgetFeatures features)
Этот сигнал излучается, когда изменяется свойство features. Параметр features содержит новое значение свойства.
Примечание: Сигнал уведомления для свойства features.
[signal] void QDockWidget::topLevelChanged(bool topLevel)
Этот сигнал излучается, когда изменяется свойство floating. Параметр topLevel равен true, если виджет док-панели теперь откреплён, иначе он равен false.
См. также isWindow().
[signal] void QDockWidget::visibilityChanged(bool visible)
Этот сигнал излучается, когда виджет док-панели становится visible (или невидимым). Это происходит, когда виджет скрыт или показан, а также когда он прикреплён в области док-панели с вкладками, и его вкладка становится выделенной или отменённой.
[virtual] QDockWidget::~QDockWidget()
Уничтожает виджет док-панели.
[override virtual protected] void QDockWidget::changeEvent(QEvent *event)
Переопределяет: QWidget::changeEvent(QEvent *event).
[override virtual protected] void QDockWidget::closeEvent(QCloseEvent *event)
Переопределяет: QWidget::closeEvent(QCloseEvent *event).
[override virtual protected] bool QDockWidget::event(QEvent *event)
Переопределяет: QWidget::event(QEvent *event).
[virtual protected] void QDockWidget::initStyleOption(QStyleOptionDockWidget *option) const
Инициализирует option значениями из этого QDockWidget. Этот метод полезен для подклассов, когда им нужен QStyleOptionDockWidget, но они не хотят заполнять всю информацию самостоятельно.
См. также QStyleOption::initFrom().
bool QDockWidget::isAreaAllowed(Qt::DockWidgetArea area) const
Возвращает true , если этот виджет док-панели может быть размещён в заданной области area; в противном случае возвращает false.
[override virtual protected] void QDockWidget::paintEvent(QPaintEvent *event)
Переопределяет: QWidget::paintEvent(QPaintEvent *event).
void QDockWidget::setTitleBarWidget(QWidget *widget)
Устанавливает произвольный widget как панель заголовка виджета док-панели. Если widget является nullptr, любой пользовательский виджет панели заголовка, ранее установленный на виджет док-панели, удаляется, но не удаляется, и вместо него используется стандартная панель заголовка.
Если установлена панель заголовка, QDockWidget не будет использовать стандартные декорации окна при его откреплении.
Вот несколько советов по реализации пользовательских панелей заголовка:
- События мыши, которые не обрабатываются явно виджетом панели заголовка, должны игнорироваться вызовом QMouseEvent::ignore(). Эти события затем передаются родительскому QDockWidget, который обрабатывает их стандартным образом, перемещая окно при перетаскивании панели заголовка, прикрепляя и открепляя при двойном щелчке и т. д.
- Когда свойство DockWidgetVerticalTitleBar установлено для QDockWidget, виджет панели заголовка перепозиционируется соответственно. В методе resizeEvent() виджет панели заголовка должен проверить, какую ориентацию он должен принять:
QDockWidget *dockWidget = qobject_cast<QDockWidget*>(parentWidget()); if (dockWidget->features() & QDockWidget::DockWidgetVerticalTitleBar) { // I need to be vertical } else { // I need to be horizontal } - Виджет панели заголовка должен иметь корректное значение QWidget::sizeHint() и QWidget::minimumSizeHint(). Эти функции должны учитывать текущую ориентацию панели заголовка.
- Удалить панель заголовка из виджета привязки невозможно. Однако аналогичный эффект можно достичь, установив виджет QWidget по умолчанию в качестве виджета панели заголовка.
Используя qobject_cast() как показано выше, виджет панели заголовка имеет полный доступ к родительскому QDockWidget. Следовательно, он может выполнять такие операции, как прикрепление и скрытие в ответ на действия пользователя.
См. также titleBarWidget() и DockWidgetVerticalTitleBar.
void QDockWidget::setWidget(QWidget *widget)
Устанавливает виджет для виджета привязки в widget.
Если виджет привязки виден при добавлении widget, необходимо явно вызвать show() для него.
Обратите внимание, что необходимо добавить макет для widget перед вызовом этой функции; в противном случае widget не будет виден.
См. также widget().
QWidget *QDockWidget::titleBarWidget() const
Возвращает настроенный виджет панели заголовка, установленный для QDockWidget, или nullptr , если настроенный виджет панели заголовка не был установлен.
См. также setTitleBarWidget().
QAction *QDockWidget::toggleViewAction() const
Возвращает действие, которое можно добавить в меню и панели инструментов, чтобы пользователь мог показывать или скрывать этот виджет привязки.
Текст действия устанавливается в заголовок окна виджета привязки.
Примечание: Действие нельзя использовать для программного отображения или скрытия виджета привязки. Используйте свойство visible для этой цели.
См. также QAction::text и QWidget::windowTitle.
QWidget *QDockWidget::widget() const
Возвращает виджет для виджета привязки. Эта функция возвращает ноль, если виджет не был установлен.
См. также setWidget().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qdockwidget.html