对 `qInitResources_systray()` 的未定义引用

4

我使用qt 官方示例,但是出现了错误:

/media/roroco/disk750/Downloads/qtbase/examples/widgets/desktop/systray/main.cpp:50: undefined reference to `qInitResources_systray()'

这是我的 CMakeLists.txt 文件

SET(CMAKE_PREFIX_PATH /media/roroco/disk750/Downloads/qtbase)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5Widgets)
add_executable(systray main.cpp window.cpp)
target_link_libraries(systray Qt5::Widgets)

如何让这个例子运行?

你忘了的是qrc文件。你可以使用qt5_add_resources将其添加到CMakeLists中。 - demonplus
谢谢,我也遇到了CMake的同样问题,这个帮助了我。原来是因为变量名不匹配,因为我使用自定义的CMake辅助函数,以便Qt4和Qt5可以由同一个CMakeLists.txt处理。 - drescherjm
1个回答

4
根据错误信息undefined reference to `qInitResources_systray()',我应该使用以下CMakeLists.txt。
cmake_minimum_required(VERSION 3.3)
project(systray)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

SET(CMAKE_PREFIX_PATH /media/roroco/disk750/Downloads/qtbase)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(Qt5Widgets)
add_executable(systray main.cpp window.cpp systray.qrc)
target_link_libraries(systray Qt5::Widgets)

这对我很有帮助,我在add_executable函数调用中漏掉了(我的等效的)systray.qrc - Jonathan E. Landrum
不仅应该在add_executable中添加systray.qrc,还要确保设置CMake变量set(CMAKE_AUTORCC ON)。这将自动处理Qt目标的rcc - Mitja Kukovec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接