在 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 没有问题,但 ma​​ke 会因每次引用 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

我已将其简化为重要的:这给出了 QWindowQVulkanInstanceQVulkanFunctionsQVulkanDeviceFunctions。

我曾尝试单独构建 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 警告]:属性或方法未在实例上定义,但在渲染期间引用

自定义 inputView 在模态演示期间未正确设置动画

在 Windows 上编译静态 Qt 构建时未定义的引用

未定义参考编译MITK/Qt

在 Windows 上使用 Qt Creator 进行调试时未显示 QStrings

使用 cmake 和 Qt4 制作期间的 RCC 解析错误