Как иметь съемные окна инструментов в Qt

Я разрабатываю инструмент, который будет иметь несколько окон переменного размера. Я могу добиться этого, используя QSplitter по горизонтали и вертикали. Пожалуйста, смотрите прикрепленное изображение.

Теперь, как сделать эти отдельные окна съемными/развернутыми/закрытыми? Как я могу добавить перекрестные маркеры в верхнем правом углу каждого окна, чтобы их можно было закрыть или отсоединить от них? Как и эта ссылка :--

http://vector.com/portal/medien/ecu_testing/tae/test_automation_editor.png

введите здесь описание изображения


person user1870619    schedule 02.05.2013    source источник


Ответы (2)


Вы ищете класс QDockWidget:

Класс QDockWidget предоставляет виджет, который можно закрепить внутри QMainWindow или разместить как окно верхнего уровня на рабочем столе. QDockWidget предоставляет концепцию стыковочных виджетов, также известных как инструментальные палитры или служебные окна. Окна стыковки — это вторичные окна, расположенные в области виджетов стыковки вокруг центрального виджета в QMainWindow.

Посмотрите этот пример

person huysentruitw    schedule 02.05.2013
comment
спасибо .. возможно ли сделать это с помощью QT Creator .. на самом деле я не могу -- объединить qdockwidget в макете, как показано на моем прикрепленном изображении, с помощью qt Creator ? - person user1870619; 02.05.2013
comment
Вы можете создать каждое дочернее окно как QDockWidget с помощью конструктора. Но я думаю, вам понадобится код, чтобы добавить их в главное окно. Чтобы создать QDockWindow: Файл › Создать › Qt › Qt Designer From Class › Widgets/QDockWidget. Затем в конструкторе MainWindow: MyDockWidget* dock = new MyDockWidget(this); addDockWidget(Qt::RightDockWidgetArea, dock); как в примере. - person huysentruitw; 02.05.2013
comment
понял, я попробую это... последнее... мы должны указать положение по умолчанию для каждого окна? - person user1870619; 02.05.2013
comment
Я думаю, что да. Когда вы звоните addDockWidget, вам нужно пройти территорию. И прежде чем задать свой следующий вопрос, вы можете программно состыковать свой виджет, производный от QDockWidget, с dock->setFloating(false); :) - person huysentruitw; 02.05.2013

In 2021, there is KDQDockWidget, по-видимому, гораздо лучшая стыковочная среда Qt как с коммерческой, так и с открытой лицензией.

На сайте перечислены следующие преимущества:

  • Он обеспечивает расширенную стыковку, которую не поддерживает QDockWidgets.
  • Механизм компоновки учитывает ограничения минимального/максимального размера и некоторые политики размера.
  • Поддерживает привязки PySide2.
  • Чистая кодовая база.
  • Поддерживает ленивое изменение размера разделителя.
  • Вы можете изменить порядок вкладок с помощью мыши.
  • Поддерживает частичное сохранение/восстановление макета, влияющее только на выбранный подмножество.
  • Позволяет дважды щелкнуть строку заголовка, чтобы развернуть.
  • Позволяет дважды щелкнуть разделитель для равномерного распределения.
  • Показывает кнопку закрытия на вкладках.
  • Позволяет сделать док-виджет незакрываемым и/или не закрепляемым.
  • Предоставляет необязательную кнопку максимизации в строке заголовка.
  • FloatingWindows могут быть служебными окнами или полностью родными.
person user118967    schedule 28.05.2021