Прикрепите собственное окно, идентифицированное HWND, в QWidget - PullRequest
0 голосов
/ 17 марта 2020

У меня есть плагин, который возвращает мне HWND окна, которое он создает. Мне нужно показать это окно внутри QWidget. Мне нужно знать, как я могу вставить окно в QWidget, зная его указатель HWND.

Я делаю пример, создавая виджет Qt, беря его HWND и затем присоединяя его к другому QWidget. Окно, которое должно быть прикреплено, может быть сделано с любой библиотекой gui (opengl, wxwidgets), так что это только пример.

Когда я создаю виджет, я получаю указатель HWND с этим кодом (m_mainWindow QMainWindow):

// adapted from https://stackoverflow.com/questions/14048565/get-hwnd-on-windows-with-qt5-from-wid
#include <qpa/qplatformnativeinterface.h>
// ...
HWND Application::getWindowHandle() const {
  HWND handle{ nullptr };
  QWindow* window = m_mainWindow->windowHandle();
  if (!window) {
    const QWidget* nativeParent = m_mainWindow->nativeParentWidget();
    if (nativeParent) {
      window = nativeParent->windowHandle();
    }
  }
  if (window && window->handle()) {
    QPlatformNativeInterface* nativeInterface = QGuiApplication::platformNativeInterface();
    handle = static_cast<HWND>(nativeInterface->nativeResourceForWindow(QByteArrayLiteral("handle"), window));
  }
  return handle;
}

Затем я создаю QWidget и пытаюсь поставить HWND с этим кодом:

void PluginWidget::setWindowHandle(HWNDhandle) {
  create((WId)handle);
}

Но это так не работа. Окно остается разделенным, и оно не отображается внутри моего PluginWidget.

Как правильно извлечь HWND окна Qt и как я могу правильно прикрепить окно, идентифицированное HWND, к другому QWidget?

...