#include class DockTitleWidget : public QWidget { bool event(QEvent *e) override { return QWidget::event(e); } QSize sizeHint() const override { return QSize(300, 20); } QSize minimumSizeHint() const override { return sizeHint(); } void paintEvent(QPaintEvent *) override { QPainter painter(this); painter.setPen(Qt::black); painter.fillRect(rect(), QBrush(Qt::red)); painter.drawText(rect(), Qt::TextWordWrap | Qt::TextWrapAnywhere, "DockWidget w title"); } }; QString screenInfo(QScreen *s) { if (!s) return "NULLPTR"; QString out; QDebug outStream(&out); outStream << s << "dpr:" << s->devicePixelRatio() << "geometry:" << s->geometry(); return out; } class XDockWidget : public QDockWidget { using QDockWidget::QDockWidget; }; int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow m; QScreen *s = QGuiApplication::screenAt(QPoint(2600, 700)); if (s) { qDebug() << "Found screen"; } else { qDebug() << "Didn't find screen"; } m.setWindowTitle(QString("Main window") + QString(qVersion())); m.resize(600, 600); m.showMaximized(); QWidget *centralWidget = new QWidget(); QSizePolicy sp(QSizePolicy::Expanding, QSizePolicy::Expanding); centralWidget->setSizePolicy(sp); m.setCentralWidget(centralWidget); DockTitleWidget *titleWidget = new DockTitleWidget(); XDockWidget *dockWdg = new XDockWidget(&m); dockWdg->setTitleBarWidget(titleWidget); m.addDockWidget(Qt::RightDockWidgetArea, dockWdg); QGroupBox *f = new QGroupBox(); f->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); dockWdg->setWidget(f); return a.exec(); }