强制QWidget子部件拥有自己的窗口句柄

Force QWidget Child to have its own Window Handle

本文关键字:拥有 自己的 窗口句柄 QWidget 强制      更新时间:2023-10-16

我正在尝试使用Qt创建一个小应用程序。我想做的是在一个码头小部件中显示一个使用DirectX11的3D界面,QMainWindow中的其他小部件将具有属性来修改DX11中显示的行为。

我面临的问题是,当我将QDockWidget添加到QMainWindow时,dockWidgetContents函数windowHandle返回NULL

我使用了一个例子,在windows上使用Qt5(从WId)获取HWND,以获得HWND。但是如果函数返回NULL,它将上升并获得QMainWindowHWND

有没有办法强迫QWidget有自己的窗口句柄?

谢谢你的建议!

是。你有几个选择。请参阅QWidget类文档中的本地小部件与外来小部件主题。

  1. 在你的环境中使用QT_USE_NATIVE_WINDOWS=1
  2. 在应用程序上设置Qt::AA_NativeWindows属性。所有小部件都是本机小部件。
  3. 在小部件上设置Qt::WA_NativeWindow属性:小部件本身及其所有祖先将成为本机(除非Qt::WA_DontCreateNativeAncestors设置)。
  4. 调用QWidget::winId强制本地窗口(这意味着3)。
  5. 设置Qt::WA_PaintOnScreen属性以强制使用本机窗口(这意味着3)。