#include #include #include #include QDockWidget* ShowDockWidget(QString name, QWidget *parent) { QDockWidget* dock = new QDockWidget(parent); QLabel *title = new QLabel(name, dock); title->setStyleSheet("background-color: red"); dock->setWindowTitle(name); dock->setTitleBarWidget(title); dock->setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu); dock->setAttribute(Qt::WA_DeleteOnClose); dock->setWidget(new QLabel("Content")); QObject::connect(dock, &QWidget::customContextMenuRequested, [dock](const QPoint& /*pos*/) { dock->setFloating(true); dock->move(dock->pos() + QPoint(100,100)); }); return dock; } int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow w; w.setDocumentMode(false); w.setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::North); w.setDockOptions(QMainWindow::AllowNestedDocks | QMainWindow::AllowTabbedDocks | QMainWindow::GroupedDragging); w.setGeometry(50,50,600,400); QDockWidget *d1 = ShowDockWidget("Dock1", &w); QDockWidget *d2 = ShowDockWidget("Dock2", &w); w.addDockWidget(Qt::RightDockWidgetArea,d1); w.addDockWidget(Qt::RightDockWidgetArea,d2); w.tabifyDockWidget(d1,d2); w.show(); return a.exec(); }