我有一个我在Qt设计器中设计的UI,并用c ++编写了代码。我正在使用catkin,这只是cmake,来构建我的项目。目前,当程序启动时,应用程序图标看起来像 。我希望这是我指定的图像,但一直无法弄清楚如何让它工作。
我的项目目录结构如下所示
package
|--CMakeLists.txt
|--src
|--main.cpp
|--MainWindow.cpp
|--resources
|--images
|--kitty.png
|--icons.qrc
|--include
|--MainWindow.hpp
|--ui
|--MainWindow.ui
我的CMakeLists.txt文件看起来像,
cmake_minimum_required(VERSION 2.8.7)
project(shared_memory_transport_sliderboard)
find_package(catkin REQUIRED)
find_package(Qt5Widgets REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
add_definitions(${Qt5Widgets_DEFINITIONS})
set(INCLUDES_DIR ${PROJECT_SOURCE_DIR}/include)
set(SOURCES_DIR ${PROJECT_SOURCE_DIR}/src)
catkin_package(
INCLUDE_DIRS ${INCLUDES_DIR}
DEPENDS Qt5Widgets
)
# c++11
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++0x support. Please use a different C++ compiler.")
endif()
include_directories(
${CMAKE_CURRENT_BINARY_DIR}
${INCLUDES_DIR}
${catkin_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
)
set(QT_FORMS
ui/MainWindow.ui
)
set(QT_MOC
${INCLUDES_DIR}/${PROJECT_NAME}/MainWindow.h
)
set(QT_SOURCES
src/MainWindow.cpp
)
qt5_wrap_cpp(QT_MOC_HPP ${QT_MOC})
qt5_wrap_ui(QT_FORMS_HPP ${QT_FORMS})
qt5_add_resources(ui_resources ${PROJECT_SOURCE_DIR}/resources/icons.qrc)
add_executable(smt_sliderboard src/main.cpp ${QT_SOURCES} ${QT_MOC_HPP} ${QT_FORMS_HPP} ${ui_resources})
target_link_libraries(smt_sliderboard ${catkin_LIBRARIES} Qt5::Widgets)
install(TARGETS smt_sliderboard
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
install(DIRECTORY include/${PROJECT_NAME}/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
FILES_MATCHING PATTERN "*.h")
编译我的代码时,编译器会生成qrc_icons.cpp.o
对象,但是当我运行可执行文件时,图标不会显示。我看起来像icons.qrc文件,
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource prefix="/Icons">
<file alias="kitty">images/kitty.jpg</file>
</qresource>
</RCC>
我也尝试在MainWindow.h中添加以下内容,
QApplication myApp(argc, argv);
QIcon appIcon;
appIcon.addFile(":/Icons/kitty");
myApp.setWindowIcon(appIcon);
这个编译得很好,但仍然没有图标。感觉就像我已经尝试过一切都没有运气,感谢您的帮助!
答案 0 :(得分:1)
来自Qt Resource System文档:
请注意,列出的资源文件必须位于相同的位置 目录作为.qrc文件或其子目录之一。
所以你需要一个像:
这样的目录结构|--images
|--images
|--kitty.png
|--icons.qrc
<强>更新强>:
您还应该参考Qt文档中的Setting the Application Icon,以确保您处理任何特定于平台的问题。