在 Windows 上制作期间未定义 Qt vulkan 类
Posted
技术标签:
【中文标题】在 Windows 上制作期间未定义 Qt vulkan 类【英文标题】:Qt vulkan classes not defined during make on windows 【发布时间】:2018-07-04 09:01:49 【问题描述】:我一直在尝试编译一个在 Linux 上运行良好的 Qt/Vulkan 项目,在 Windows 上。我正在使用 QtCreator、Qt (5.11.0) 和 MingW。
我可以 qmake 没有问题,但 make 会因每次引用 QVulkan* 类时出现错误而崩溃,例如“未在此范围内定义”,但似乎已找到并包含该类的标题。 我曾尝试编译 qt vulkan 示例,但遇到了同样的问题。 我跑了configure -v,发现:
Qt Gui:
Vulkan ................................. yes
这是一个崩溃的标头示例:
#ifndef WINDU_H
#define WINDU_H
#include <QWindow>
#include <QVulkanInstance>
#include <QVulkanFunctions>
#include <QVulkanDeviceFunctions>
class Windu : public QWindow
public :
Windu();
~Windu();
void render();
void start();
void reset();
QVulkanInstance inst;
QVulkanFunctions* vki;
QVulkanDeviceFunctions* vkd;
;
#endif
我已将其简化为重要的:这给出了 QWindow、QVulkanInstance、QVulkanFunctions、QVulkanDeviceFunctions。
我曾尝试单独构建 qtgui,但它也崩溃了,因为它找不到 Qt OpenGLES 源文件。
我对 windows 上的 C++ 了解不多。
这是我的 .pro 文件:
SHADERS = $$files(*.comp, true)
SHADERS += $$files(*.frag, true)
SHADERS += $$files(*.vert, true)
spirv.output = $QMAKE_FILE_NAME.spv
spirv.commands = glslangValidator -V $QMAKE_FILE_NAME -o $QMAKE_FILE_OUT
spirv.depends = $$SHADERS
spirv.input = SHADERS
spirv.variable_out = COMPILED_SHADERS
spirv.CONFIG = target_predeps
SOURCES = $$files(*.cpp, true)
HEADERS = $$files(*.h, true)
# install
target.path = build
target.depends = spirv
DESTDIR=bin #Target file directory
OBJECTS_DIR=build #Intermediate object files directory
MOC_DIR=build #Intermediate moc files directory
CONFIG+=debug
QMAKE_EXTRA_COMPILERS += spirv
如果需要,这里是 repo: https://github.com/Paul-Hubert/fantastic-octree/blob/master/fantastic-octree.pro
【问题讨论】:
您的.pro
文件是什么样的?
@Botje 我已经编辑了它,但是虽然我的 .pro 是非典型的,但我无法构建 qt 示例,所以它不应该是原因。
我觉得你忘了在你的 .pro 文件中添加QT += gui
没关系.. QT 默认包含gui
。对不起。
【参考方案1】:
所以我发现在 Windows 上,获取 Vulkan 类的唯一方法是自己构建 Qt。我已经这样做了,但是我做错了什么使构建无法使用。您必须按照此处所述构建源代码:http://doc.qt.io/qt-5/build-sources.html,并使用它来构建项目。我在 QtCreator 中添加了一个工具包来执行此操作。
【讨论】:
以上是关于在 Windows 上制作期间未定义 Qt vulkan 类的主要内容,如果未能解决你的问题,请参考以下文章
[Vue 警告]:属性或方法未在实例上定义,但在渲染期间引用