强制QWidget Child拥有自己的窗口句柄

时间:2013-05-14 22:38:03

标签: c++ windows qt user-interface qt5

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

我遇到的问题是,当我向QDockWidget添加QMainWindow时,dockWidgetContents函数windowHandle会返回NULL

我正在使用Get HWND on windows with Qt5 (from WId)中的示例来获取HWND。但如果函数返回NULL,它将会上升并获得HWND的{​​{1}}。

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

感谢您的任何建议!

1 个答案:

答案 0 :(得分:3)

是。你有几个选择。请参阅QWidget class documentation中的原生窗口小部件与外部窗口小部件主题。

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