Заставить QWidget Child иметь собственную оконную ручку

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

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

Я использую пример из Get HWND для Windows с Qt5 (из WId), чтобы получить HWND, Но если функция вернуть NULL он поднимется и получит HWND из QMainWindow,

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

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

1 ответ

Решение

Да. У вас есть несколько вариантов для этого. См. Тему " Нативные виджеты против чужих виджетов" в документации по классу 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).
Другие вопросы по тегам