c++ 从Qt获取本地窗口句柄以创建vulkan表面

8i9zcol2  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(298)

我尝试使用Qt来呈现Vulkan的渲染结果,而不是glfw。我知道Qt提供QVulkanInstanceQVulkanWindow,但我喜欢用我的代码来控制Vulkan。
在Windows中,我有一个QWindowHWND,如下所示:

[[maybe_unused]] auto wid = winId();
auto* platformInterface = QGuiApplication::platformNativeInterface();
auto* handle = platformInterface->nativeResourceForWindow("handle", this);
auto* hwnd = static_cast<HWND>(handle);
vk::Win32SurfaceCreateInfoKHR surfaceInfo{};
surfaceInfo.setHwnd(hwnd);
surfaceInfo.setHinstance(GetModuleHandle(nullptr));

我使用surfaceInfo成功创建了vk::SurfaceKHR
但是,当我尝试在macos中这样做时:

[[maybe_unused]] auto wid = winId();
auto* platformInterface = QGuiApplication::platformNativeInterface();
auto* handle = platformInterface->nativeResourceForWindow("nsview", this);
auto* nsview= static_cast<NSView*>(handle);

我得到了unknown type name NSView的错误,我以为我可以像HWND一样使用NSView,但我不能。
我正在使用Qt6,我发现QMacNativeWidget提供了一个nativeView函数来返回NSView*,但QMacNativeWidget已在Qt6中删除。

31moq8wy

31moq8wy1#

我得到了未知类型名称NSView的错误,我以为我可以像HWND一样使用NSView,但我不能。
您应该发布确切的错误,因为这听起来更像是一个丢失的包含文件。这个错误是在编译时发生的还是在实际运行应用程序时发生的?
此外,winId应该可以直接转换为Windows上的HWND和MacOS上的NSView*

auto hwnd = reinterpret_cast<HWND>(winId()); // On Windows
auto view = reinterpret_cast<NSView*>(winId()); // On Mac

相关问题