我有一个Qt应用程序,我可以在其中加载和显示图标。这是我如何做到这一点的一个独立示例。在main.cpp
我有:
Q_INIT_RESOURCE(Icons);
QApplication qapp(argc, argv);
QMainWindow window;
QAction* action = new QAction(QIcon(":/icon.png"), QObject::tr("&Icon"), &window);
QToolBar* tb = window.addToolBar(QObject::tr("Test"));
tb->addAction(action);
window.show();
return qapp.exec();
以Icons.qrc
为资源文件。
我的CMakeLists.txt
包含:
# ...
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 REQUIRED COMPONENTS Core Gui OpenGL)
set(SOURCES main.cpp)
qt5_add_resources(ICON_RSC Data/Icons.qrc)
add_executable(${PROJECT_NAME} ${SOURCES} ${ICON_RSC})
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Gui Qt5::OpenGL)
假设我创建了一个应用程序的二进制文件:我复制生成的exe
文件和所有必要的Qt,平台和插件dll
它们应该在应用程序文件夹中的位置。如果我使用 icon.png
,我的二进制应用程序运行没有问题。
但是,我想使用svg
格式。如果我将icon.png
替换为icon.svg
,应用程序将从源代码编译并运行,但二进制文件不再显示该图标。
我的问题是为什么会发生这种情况?这是否与我的二进制文件夹中缺少库有关(我包含了imageformats
文件夹,我可以看到那里qsvg.dll
,我还包含了iconengines
里面有qsvgicon.dll
的文件夹(;还是Qt被设计为不使用svg
文件作为图标?
我在Qt5.4上测试了该应用程序,在Windows 7和10上测试了Qt5.5。Qt套件MSVC2010和MSVC2013 - 32位。
你应该链接到Qt5::SVG
并包含Qt XML库,参见这里。
您可能可以将两者添加到您的 CMake 文件中:
find_package(Qt5 REQUIRED COMPONENTS Core Gui OpenGL SVG XML)
和
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Gui Qt5::OpenGL Qt5::SVG Qt5::XML)