2013-05-14 4 views
2

Я пытаюсь создать небольшое приложение, используя Qt. То, что я хочу сделать, - показать в виджетах док-станции 3D-интерфейс с помощью DirectX11, другие виджеты в QMainWindow будут иметь свойства, позволяющие изменить поведение отображаемого в DX11.Force QWidget У ребенка есть своя ручка Window

Проблема я столкнулся в том, что, когда я добавить QDockWidget к QMainWindow, функция dockWidgetContentswindowHandle возвращает NULL.

Я использую пример от Get HWND on windows with Qt5 (from WId), чтобы получить HWND. Но если функция возвращает NULL, она будет расти и получить HWNDQMainWindow.

Есть ли способ заставить QWidget иметь собственную ручку окна?

Спасибо за любой совет!

ответ

3

Да. У вас есть несколько вариантов для этого. См. Раздел Родные виджеты против чужих виджетов в QWidget class documentation.

  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).
+0

Большое спасибо! –

+1

Создание всех виджета на родном языке - плохая идея, это будет свинга производительности. Все, что делает это, - нет-нет. Атрибут должен быть установлен для отдельного виджета. –