Qt5 linux如何设置窗口图标图像

时间:2016-03-26 21:51:03

标签: linux cmake icons qt5 qmainwindow

我有一个我在Qt设计器中设计的UI,并用c ++编写了代码。我正在使用catkin,这只是cmake,来构建我的项目。目前,当程序启动时,应用程序图标看起来像enter image description here 。我希望这是我指定的图像,但一直无法弄清楚如何让它工作。

我的项目目录结构如下所示

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);

这个编译得很好,但仍然没有图标。感觉就像我已经尝试过一切都没有运气,感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

来自Qt Resource System文档:

  

请注意,列出的资源文件必须位于相同的位置   目录作为.qrc文件或其子目录之一。

所以你需要一个像:

这样的目录结构
|--images
    |--images
       |--kitty.png
    |--icons.qrc

<强>更新

您还应该参考Qt文档中的Setting the Application Icon,以确保您处理任何特定于平台的问题。