У меня есть плагин, который возвращает мне 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?