Qt 6已经删除了支持。 for 夹角作为他们的OpenGL后端。现在,我仍然希望在Qt中使用and,因为我希望运行自定义的OpenGL代码,这些代码在Windows上被转换成Vulkan和Direct3D。我尝试在我的Qt 6应用程序中使用角度,但没有成功。我试过的是:
根据指令(角度生成指令) )从源文件构建角度(在Linux上)。
将生成的libGLESv2.so和libEGL.so文件复制到应用程序目录中。然后,在我的CMakeFiles.txt中,我添加了:
find_library(libGLESv2 GLESv2)
find_library(libEGL EGL)
target_link_libraries(MyApp PRIVATE ${libGLESv2} ${libEGL})然后在我的主文件中添加了
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);我的项目链接和构建良好,但角度后端似乎没有任何影响。看来,Qt仍然在使用标准的OpenGL实现,而不是ANGLE提供的实现(在设置上下文时,运行QOpenGLContext::currentContext()->hasExtension("EGL_ANGLE_platform_angle")返回false )。
使用QT_LOGGING_RULES=qt.qpa.gl=true,日志显示:
qt.qpa.gl:基于以下优先级("xcb_glx“、"xcb_egl")选择Xcb gl-- qt.qpa.gl: Xcb GLX gl--集成创建了qt.qpa.gl: xcb GLX gl--集成成功初始化了qt.qpa.gl:在FBConfig/可视化选择之前被请求的格式: QSurfaceFormat(version 3.0,options QFlagsQSurfaceFormat::FormatOption(),depthBufferSize 24,redBufferSize 8,greenBufferSize 8,blueBufferSize 8,alphaBufferSize -1,stencilBufferSize 8,samples 1,swapBehavior QSurfaceFormat::DoubleBuffer,swapInterval 1,colorSpace QSurfaceFormat::DefaultColorSpace,profile QSurfaceFormat::NoProfile)
如何正确设置Qt以依赖角度?
发布于 2022-01-29 09:29:39
好吧,
当我要求一个可构建的项目来重现这个问题时,我并不是指没有导致问题的CMakeLists.txt的源代码片段。我花了4个小时试图复制你的环境盲。没有人使用Qt 6,因为它很可怕。
第一个问题是你不能“复制”libs。GLES libs

EGL库

后抄

构建和运行时系统需要它的一系列链接。当您复制时,因为您获得了多个相同文件的副本,而不是一个带有一串链接的副本,所以丢失了该副本。如果要使用这些库,则需要从安装的位置或原始构建位置使用它们。
我想向你证明这个解决方案,而不是直接告诉你,但我遇到了同样的问题,98.5%的开发人员在安装靠近Qt的Android时会遇到同样的问题。。
我想让您看看用于CMakeLists.txt的WaylandGUI文件,并不是因为它是一个精彩的示例,而是因为您了解了如何使用message()来转储cmake变量。这是排除cmake问题时的“默认调试器”。
您没有正确地使用find_library()
如果您安装了您构建的角度库,find_library就有50/50的可能会找到它。您需要转储cmake变量来查看它的位置和找到了什么,并且需要message()。
特别是阅读CMAKE_PREFIX_PATH和find_library()的PATHS选项。如果文档看起来像mud一样清晰,那么您就可以在CMAKE_PREFIX_PATH上讨论这个问题了。
您需要知道的另一个命令是ldd。真正令人震惊的是,有多少人在Linux上开发时不知道这个命令。

从较高的概念级别来看,ldd所做的是告诉您加载程序在运行可执行文件时将使用的每个库,至少从初始加载的角度来看是这样。可执行文件本身可以强制在运行时加载其他库。当可执行文件在启动前死亡时,可以使用ldd跟踪无法找到的库(或库使用的库)。
在您的特殊情况下,ldd将告诉您在链接期间使用了哪些GLES和EGL库。默认情况下,find_library()首先查找“常见位置”,这不是本地构建目录。您遇到的问题是您试图替换链接中现有的系统库。下面是关于如何在find_library()中使用提示等方面的find_library()。
如果不能复制您的构建环境,并且没有一个完整的可构建的示例来复制这个问题,我将无法提供进一步的帮助。
https://stackoverflow.com/questions/70779840
复制相似问题