CMake 链接 Qt5::Svg 但 QImageReader 看不到
Posted
技术标签:
【中文标题】CMake 链接 Qt5::Svg 但 QImageReader 看不到【英文标题】:CMake link Qt5::Svg but not see by QImageReader 【发布时间】:2020-10-01 18:06:06 【问题描述】:我最近更换了我的电脑(Windows 10),所以我重新安装了 CLion 和 Qt(使用 CMake 编译)。但是我的一个项目不再起作用了。
我已将 Qt5::Svg 添加到 CMake 中,它可以编译,但应用程序中没有出现 SVG。如果我尝试使用 QImageReader::supportedImageFormats(),则不会列出“SVG”。
我在构建目录中有 Qt5Svgd.dll。
这里是我的 CMake 配置:
cmake_minimum_required(VERSION 3.16)
project(NBTModifier)
set(CMAKE_CXX_STANDARD 20)
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Svg REQUIRED)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
include_directories($CMAKE_BINARY_DIR)
add_executable(
NBTModifier
main.cpp
MainWindow/MainWindow.ui MainWindow/MainWindow.h MainWindow/MainWindow.cpp
icons/breeze.qrc icons/breeze-dark.qrc
)
target_link_libraries(NBTModifier Qt5::Widgets Qt5::Svg)
我错过了什么吗?
编辑:根据alexandre 的建议,我运行 DependencyWalker:我的“NBTModifier.exe”似乎不依赖于 Qt5Svgd.dll。它解释了为什么 QImageReader 不显示它。
那么为什么 CMake 不将 Qt5Svg 链接到我的应用程序?
【问题讨论】:
当您运行您的软件时,如果正确找到并加载了 SVG DLL,可能会检查 DependencyWalker(或 Depends)。 好建议。问题更新:DLL 未链接 【参考方案1】:要在您的应用程序中显示 SVG 图像(即图标),您需要相应的 imageformat 插件,该插件正在运行时加载(这就是 DependenyWalker 不显示它的原因)。查看您的QTDIR/plugins/imageformats
目录,查找qsvg.dll
或libqsvg.dll
,如果需要,将其复制到您的运行时目录中。有关相应文档,请参阅https://doc.qt.io/archives/qt-5.11/windows-deployment.html#qt-plugins。
【讨论】:
Thanks, it works. Using theme system, i also add
platformthemes` 和 iconengine
。但是,我不明白为什么我以前的电脑不需要它们。
我猜你之前的系统 QTDIR 被添加到你的 PATH 中,所以即使它不在运行时目录中,你的可执行文件也会找到它。设置 Qt 开发环境并在 Windows 上运行 Qt 应用程序是边缘黑魔法,至少对我来说,作为一个 Unix/Linux 人......有关 dll 查找的更多详细信息,请参阅docs.microsoft.com/en-us/windows/win32/dlls/…以上是关于CMake 链接 Qt5::Svg 但 QImageReader 看不到的主要内容,如果未能解决你的问题,请参考以下文章