2

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

我面临的问题是,当我添加一个QDockWidgettoQMainWindow时,dockWidgetContents函数windowHandle返回NULL

我正在使用Qt5(来自 WId)的 Windows 上的 Get HWND示例来获取HWND. 但是如果函数返回NULL它会上升并HWND得到QMainWindow.

有没有办法强制 aQWidget拥有自己的窗口句柄?

感谢您的任何建议!

4

1 回答 1

3

是的。你有几个选择。请参阅QWidget 类文档中的主题Native Widgets vs Alien Widgets

  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)。
于 2013-05-15T08:14:29.387 回答