【问题标题】:Qt5 linux how to set window icon imageQt5 linux如何设置窗口图标图像
【发布时间】:2016-03-26 21:51:02
【问题描述】:

我有一个我在 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);

这编译得很好,但仍然没有图标。感觉我什么都试过了,都没有运气,谢谢你的帮助!

【问题讨论】:

    标签: linux cmake icons qt5 qmainwindow


    【解决方案1】:

    来自Qt Resource System 文档:

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

    所以你需要一个类似的目录结构:

    |--images
        |--images
           |--kitty.png
        |--icons.qrc
    

    更新

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

    【讨论】:

    • 不错的收获!我相应地更新了我的目录结构,但仍然没有骰子..
    • 当然应该是:appIcon.addFile(":/images/kitty.png");?
    • 我想我说得对吧?查看here 关于prefixalias 的内容
    • 嗯,是的,我知道它是如何工作的——但我看不到你的 qrc 文件中有什么。并且您的原始问题似乎没有使用别名。您是否真的检查过是否可以使用QFile 读取资源?
    • 糟糕,抱歉,我已将 .qrc 文件的内容添加到问题中。我还创建了一个QFile,比如QFile test(":/Icons/kitty"),它编译并运行得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多