Skip to content

Commit a3de818

Browse files
Kakueeendeepin-bot[bot]
authored andcommitted
feat: add Qt5 and Qt6 dual version support
1. Added automatic Qt version detection in CMakeLists.txt to support both Qt5 and Qt6 2. Modified CMake configuration to use dynamic Qt version variables instead of hardcoded Qt6 3. Updated debian/control to include Qt5 package alternatives for build dependencies 4. Enhanced debian/rules to detect available Qt version and set appropriate QT_DIR 5. This change allows the project to build on systems with either Qt5 or Qt6 installed Log: Added support for both Qt5 and Qt6 versions Influence: 1. Test building on systems with only Qt5 installed 2. Test building on systems with only Qt6 installed 3. Verify application functionality on both Qt5 and Qt6 environments 4. Check that all UI components render correctly in both versions 5. Test device formatting functionality remains consistent across Qt versions feat: 添加 Qt5 和 Qt6 双版本支持 1. 在 CMakeLists.txt 中添加自动 Qt 版本检测,支持 Qt5 和 Qt6 2. 修改 CMake 配置使用动态 Qt 版本变量替代硬编码的 Qt6 3. 更新 debian/control 包含 Qt5 包替代方案用于构建依赖 4. 增强 debian/rules 以检测可用 Qt 版本并设置合适的 QT_DIR 5. 此更改允许项目在安装 Qt5 或 Qt6 的系统上构建 Log: 新增对 Qt5 和 Qt6 双版本的支持 Influence: 1. 在仅安装 Qt5 的系统上测试构建 2. 在仅安装 Qt6 的系统上测试构建 3. 验证应用在 Qt5 和 Qt6 环境下的功能 4. 检查所有 UI 组件在两个版本中是否正确渲染 5. 测试设备格式化功能在 Qt 版本间保持一致 TASK: https://pms.uniontech.com/task-view-383509.html
1 parent 91a9500 commit a3de818

4 files changed

Lines changed: 99 additions & 46 deletions

File tree

CMakeLists.txt

Lines changed: 73 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,25 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
1010
# 包含 GNUInstallDirs,用于获取标准安装路径
1111
include(GNUInstallDirs)
1212

13+
# Find Qt version
14+
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
15+
message(" >>> Found Qt version: ${QT_VERSION_MAJOR}")
16+
17+
if (QT_VERSION_MAJOR MATCHES 6)
18+
set(DTK_VERSION_MAJOR 6)
19+
else()
20+
set(DTK_VERSION_MAJOR "")
21+
endif()
22+
1323
# 查找必要的包
14-
find_package(Qt6 COMPONENTS Core Gui Widgets Concurrent Network DBus LinguistTools REQUIRED)
15-
find_package(Dtk6 COMPONENTS Widget Gui REQUIRED)
16-
find_package(udisks2-qt6 REQUIRED)
24+
set(QT_COMPONENTS Core Gui Widgets Concurrent Network DBus LinguistTools)
25+
if (QT_VERSION_MAJOR MATCHES 5)
26+
list(APPEND QT_COMPONENTS X11Extras)
27+
endif()
28+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS ${QT_COMPONENTS} REQUIRED)
29+
find_package(Dtk${DTK_VERSION_MAJOR} COMPONENTS Widget Gui REQUIRED)
1730
find_package(PkgConfig REQUIRED)
31+
pkg_check_modules(UDISKS2QT REQUIRED IMPORTED_TARGET udisks2-qt${QT_VERSION_MAJOR})
1832
pkg_check_modules(PKGS REQUIRED
1933
x11
2034
)
@@ -52,20 +66,39 @@ set(HEADERS
5266
# 设置翻译文件
5367
file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/translations/${PROJECT_NAME}*.ts")
5468

55-
# 使用 Qt 提供的翻译工具
56-
qt_add_translations(${PROJECT_NAME}
57-
# 指定翻译源文件
58-
TS_FILES ${TS_FILES}
59-
# 指定 QM 文件输出变量
60-
QM_FILES_OUTPUT_VARIABLE QM_FILES
61-
# 指定源文件,用于更新翻译
62-
SOURCES ${SOURCES} ${HEADERS}
63-
# 指定 LRELEASE 选项
64-
LRELEASE_OPTIONS
65-
-compress
66-
-nounfinished
67-
-removeidentical
68-
)
69+
# 根据 Qt 版本使用不同的翻译工具
70+
if (QT_VERSION_MAJOR MATCHES 6)
71+
# Qt6 使用 qt_add_translations
72+
qt_add_translations(${PROJECT_NAME}
73+
# 指定翻译源文件
74+
TS_FILES ${TS_FILES}
75+
# 指定 QM 文件输出变量
76+
QM_FILES_OUTPUT_VARIABLE QM_FILES
77+
# 指定源文件,用于更新翻译
78+
SOURCES ${SOURCES} ${HEADERS}
79+
# 指定 LRELEASE 选项
80+
LRELEASE_OPTIONS
81+
-compress
82+
-nounfinished
83+
-removeidentical
84+
)
85+
else()
86+
# Qt5 手动生成 QM 文件
87+
find_program(QT_LRELEASE_EXECUTABLE NAMES lrelease-qt5 lrelease)
88+
set(QM_FILES)
89+
foreach(TS_FILE ${TS_FILES})
90+
get_filename_component(TS_FILE_NAME ${TS_FILE} NAME_WE)
91+
set(QM_FILE "${CMAKE_CURRENT_BINARY_DIR}/${TS_FILE_NAME}.qm")
92+
add_custom_command(
93+
OUTPUT ${QM_FILE}
94+
COMMAND ${QT_LRELEASE_EXECUTABLE} -compress -nounfinished -removeidentical ${TS_FILE} -qm ${QM_FILE}
95+
DEPENDS ${TS_FILE}
96+
COMMENT "Generating ${QM_FILE} from ${TS_FILE}"
97+
)
98+
list(APPEND QM_FILES ${QM_FILE})
99+
endforeach()
100+
add_custom_target(translations ALL DEPENDS ${QM_FILES})
101+
endif()
69102

70103
# 在文件开头部分添加自动 moc 处理
71104
set(CMAKE_AUTOMOC ON)
@@ -79,45 +112,53 @@ add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
79112
target_include_directories(${PROJECT_NAME} PRIVATE
80113
${CMAKE_CURRENT_SOURCE_DIR}
81114
${PKGS_INCLUDE_DIRS}
115+
${UDISKS2QT_INCLUDE_DIRS}
82116
)
83117

84118
# 链接库
85119
target_link_libraries(${PROJECT_NAME} PRIVATE
86-
Qt6::Core
87-
Qt6::Gui
88-
Qt6::GuiPrivate
89-
Qt6::Widgets
90-
Qt6::Concurrent
91-
Qt6::Network
92-
Qt6::DBus
93-
Dtk6::Widget
94-
Dtk6::Gui
95-
udisks2-qt6::udisks2-qt6
120+
Qt${QT_VERSION_MAJOR}::Core
121+
Qt${QT_VERSION_MAJOR}::Gui
122+
Qt${QT_VERSION_MAJOR}::GuiPrivate
123+
Qt${QT_VERSION_MAJOR}::Widgets
124+
Qt${QT_VERSION_MAJOR}::Concurrent
125+
Qt${QT_VERSION_MAJOR}::Network
126+
Qt${QT_VERSION_MAJOR}::DBus
127+
Dtk${DTK_VERSION_MAJOR}::Widget
128+
Dtk${DTK_VERSION_MAJOR}::Gui
129+
PkgConfig::UDISKS2QT
96130
${PKGS_LIBRARIES}
97131
)
98132

133+
# Qt5 需要链接 X11Extras
134+
if (QT_VERSION_MAJOR MATCHES 5)
135+
target_link_libraries(${PROJECT_NAME} PRIVATE
136+
Qt${QT_VERSION_MAJOR}::X11Extras
137+
)
138+
endif()
139+
99140
# 添加编译选项
100141
target_compile_options(${PROJECT_NAME} PRIVATE ${PKGS_CFLAGS_OTHER})
101142

102143
# 设置翻译文件路径
103144
set(TRANSLATIONS_INSTALL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/translations")
104145

105146
# 添加编译定义,传递安装路径到代码中
106-
target_compile_definitions(${PROJECT_NAME} PRIVATE
147+
target_compile_definitions(${PROJECT_NAME} PRIVATE
107148
"TRANSLATIONS_DIR=\"${TRANSLATIONS_INSTALL_DIR}\""
108149
)
109150

110151
# 安装目标
111-
install(TARGETS ${PROJECT_NAME}
152+
install(TARGETS ${PROJECT_NAME}
112153
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
113154
)
114155

115156
# 安装翻译文件
116-
install(FILES ${QM_FILES}
157+
install(FILES ${QM_FILES}
117158
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/translations
118159
)
119160

120161
# 安装桌面文件
121-
install(FILES dde-device-formatter.desktop
162+
install(FILES dde-device-formatter.desktop
122163
DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
123-
)
164+
)

debian/control

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ Priority: optional
44
Maintainer: Deepin Packages Builder <packages@linuxdeepin.com>
55
Build-Depends: cmake,
66
debhelper (>=9),
7-
qt6-base-dev,
8-
qt6-declarative-dev,
9-
qt6-tools-dev,
10-
qt6-tools-dev-tools,
11-
qt6-base-private-dev,
12-
libdtk6widget-dev,
13-
libdtk6gui-dev,
14-
libdtk6core-dev,
15-
libudisks2-qt6-dev
7+
qt6-base-dev | qtbase5-dev,
8+
qt6-declarative-dev | qtdeclarative5-dev,
9+
qt6-tools-dev | qttools5-dev,
10+
qt6-tools-dev-tools | qttools5-dev-tools,
11+
qt6-base-private-dev | qtbase5-private-dev,
12+
libdtk6widget-dev | libdtkwidget-dev,
13+
libdtk6gui-dev | libdtkgui-dev,
14+
libdtk6core-dev | libdtkcore-dev,
15+
libudisks2-qt6-dev | libudisks2-qt5-dev
1616
Standards-Version: 3.9.8
1717
Homepage: http://www.deepin.org
1818

debian/rules

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
#!/usr/bin/make -f
22

3-
export QT_SELECT=5
43
include /usr/share/dpkg/default.mk
5-
64
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
5+
6+
# 检测当前安装的Qt版本,优先使用Qt6,否则使用Qt5
7+
define detect_qt_version
8+
ifneq (,$(shell which qmake6 2>/dev/null))
9+
QT_DIR="/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/Qt6"
10+
else
11+
QT_DIR="/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/Qt5"
12+
endif
13+
endef
14+
715
export DEB_LDFLAGS_APPEND = -Wl,-z,now
816

917
%:
1018
dh $@ --parallel
1119

1220
override_dh_auto_configure:
13-
dh_auto_configure -- VERSION=$(VERSION) LIB_INSTALL_DIR=/usr/lib/$(DEB_HOST_MULTIARCH) DEFINES+="VERSION=$(DEB_VERSION_UPSTREAM)"
21+
dh_auto_configure -- VERSION=$(VERSION) LIB_INSTALL_DIR=/usr/lib/$(DEB_HOST_MULTIARCH) DEFINES+="VERSION=$(DEB_VERSION_UPSTREAM)" QT_DIR=$(QT_DIR)

main.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020
#include <X11/Xlib.h>
2121
#include <QGuiApplication>
2222
#include <QScreen>
23+
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
2324
#include <QtGui/private/qtx11extras_p.h>
25+
#else
26+
#include <QX11Info>
27+
#endif
2428

2529
DCORE_USE_NAMESPACE
2630

@@ -29,7 +33,7 @@ DCORE_USE_NAMESPACE
2933
int main(int argc, char *argv[])
3034
{
3135
qDebug() << "Main: Starting dde-device-formatter application";
32-
36+
3337
// 设置Deepin平台主题
3438
if (qgetenv("QT_QPA_PLATFORMTHEME").isEmpty()) {
3539
qputenv("QT_QPA_PLATFORMTHEME", "deepin");
@@ -131,7 +135,7 @@ int main(int argc, char *argv[])
131135
}
132136

133137
int code = a.exec();
134-
138+
135139
qDebug() << "Main: Performing quick exit";
136140
quick_exit(code);
137141
}

0 commit comments

Comments
 (0)