【发布时间】:2019-03-12 12:11:20
【问题描述】:
我正在寻找一种在 QVulkanWindow 上绘制任何 QT 小部件叠加层的方法。我找不到解决方案。子/父层次结构和 QT 标志不会带来预期的行为。是否可以在 QVulkanWindow 顶部绘制 QT 小部件?
我尝试了以下方法
1) 尝试从一个父 QWidget 创建 QWidget 和 Vulkan 窗口
auto widget = new QWidget;
widget->resize(m_default_width, m_default_height);
widget->show();
m_label = new QLabel("text.", widget);
m_label->show();
m_vulkan_window = std::make_shared<WSQVulkanWindow>(this);
m_vulkan_window->setVulkanInstance(&m_qt_vk_instance);
m_vulkan_window->show();
auto wrapper = QWidget::createWindowContainer(m_vulkan_window.get(), widget);
wrapper->resize(m_default_width, m_default_height);
wrapper->show();
2) 添加了以下标志
m_label->setAttribute(Qt::WA_NoSystemBackground);
m_label->setAttribute(Qt::WA_TranslucentBackground);
m_label->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::CoverWindow);
标签显示在 vulkan 窗口顶部,但不跟随 vulkan 窗口位置
3) 尝试将 VulkanWindow 和 QLabel 小部件的 QWidget::createWindowContainer 添加到具有 QGridLayout 或 QVBoxLayout 的父小部件。
没有效果
4) 使用父级 newwidget->windowHandle() 创建 QVulkanWindow,并在 newwidget 父级上创建 QLabel 小部件
5) 使用父 QVulkanWindow 创建新的 QWindow。之后从 QWindow 创建小部件并为提到的小部件创建子 QLabel。
winapi 在 vulkan 窗口顶部创建按钮。但是不可能创建半透明的小部件
m_hwndButton = CreateWindowExW(
0L,
L"BUTTON", // Predefined class; Unicode assumed
L"VR", // Button text
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // Styles
10, // x position
10, // y position
50, // Button width
50, // Button height
(HWND)m_vulkan_window->winId(), // Parent window
NULL, // No menu.
(HINSTANCE)GetWindowLong((HWND)m_vulkan_window->winId(), -6), //instance
NULL); // Pointer not needed.
ShowWindow(m_hwndButton, SW_SHOW);
UpdateWindow(m_hwndButton);
【问题讨论】:
-
请提供有关您迄今为止尝试过的方法以及它如何不起作用的信息。请包含一个小代码示例。