与QWinWidget对接:为QWidgets添加DockWidgetAreas

Docking with QWinWidget: Adding DockWidgetAreas to QWidgets

我有一个在 Win32 window 中使用 QWinWidget 的应用程序。我想向其中添加 DockWidgets 和相关行为。似乎没有任何公开的用于添加自定义 DockAreas 的 API,并且除了将 DockWidgets 添加到 QMainWindow 之外,最新的文档很少。 Older docs imply曾经有一个publicQDockAreaclass.

到目前为止,我最好的选择似乎是 adding a neutered QMainWindow (no top-level status, no frame, etc.) to the QWinWidget and going from there (second source)。

我希望有一种方法可以将 DockAreas 添加到任何容器中,但它并没有以这种方式出现。作为旁注,QWinWidget 用于根据我们的自定义框架要求对 window 管理器进行控制,但是如果有一个纯粹的 QMainWindow/QWidget 方式来获得相同的结果( Qt::FramelessWindowHint),我很乐意切换。

正如我在评论中所说,我在我的 Win32 window QWinWidget 中添加了一个 QMainWindow 字段。即:

class QWinWidget : public QWidget
{
  ...
  QMainWidget* mainWidget;
}

QWinWidget::QWinWidget()
{
  mainWidget = new QMainWindow(this);
  mainWidget->setWindowFlags(Qt::Widget); //1
}

请注意,虽然 the docs and some forum posts (from this post) 表示由于 QMainWindow 构造函数设置 Qt::Window,您需要显式设置 window 标志,但我在没有 setWindowFlags() 行的情况下对其进行了测试(上面标有//1)没有发现任何错误。

所以,这给了我漂亮的 QWinWidget window 我花了很多时间在无框架的 Win32 window 中制作,带有 QMainWindow child 以及带来的所有功能用它。停靠、菜单栏、状态栏等