Skip to content

feat(tests): add Qt5/Qt6 compatibility support#52

Merged
deepin-bot[bot] merged 1 commit intolinuxdeepin:develop/20260424from
pppanghu77:dev
Apr 28, 2026
Merged

feat(tests): add Qt5/Qt6 compatibility support#52
deepin-bot[bot] merged 1 commit intolinuxdeepin:develop/20260424from
pppanghu77:dev

Conversation

@pppanghu77
Copy link
Copy Markdown
Contributor

  • Add conditional package finding for Qt6 or Qt5 dependencies
  • Use generator expressions to link appropriate Qt version libraries
  • Add preprocessor conditionals for Qt6 vs Qt5 API usage
  • Maintain backward compatibility with both Qt frameworks

- Add conditional package finding for Qt6 or Qt5 dependencies
- Use generator expressions to link appropriate Qt version libraries
- Add preprocessor conditionals for Qt6 vs Qt5 API usage
- Maintain backward compatibility with both Qt frameworks
@deepin-ci-robot
Copy link
Copy Markdown

deepin pr auto review

这份代码修改的主要目的是为了兼容 Qt5 和 Qt6 两个版本,同时对版权年份进行了更新。以下是对代码的详细审查和改进建议:

1. 语法逻辑审查

CMakeLists.txt 部分:

  • ✅ 逻辑正确:使用 if(Qt6_FOUND) 来判断 Qt 版本并进行相应的包查找。
  • ✅ 链接库处理正确:使用生成器表达式 $<IF:...> 根据条件选择不同的库进行链接。

main.cpp 部分:

  • ✅ 条件编译正确:使用 QT_VERSION_CHECK 宏来区分 Qt5 和 Qt6 的 API 调用。
  • ✅ 版权年份更新:从 2024 更新到 2024-2026,符合规范。

2. 代码质量建议

CMakeLists.txt 改进建议:

# 建议:显式定义 Qt 版本变量,提高可读性
if(Qt6_FOUND)
    set(QT_VERSION_MAJOR 6)
    find_package(Qt6 REQUIRED COMPONENTS Core Test)
    find_package(Dtk6 REQUIRED COMPONENTS Core)
else()
    set(QT_VERSION_MAJOR 5)
    find_package(Qt5 REQUIRED COMPONENTS Core Test)
    find_package(DtkCore REQUIRED)
endif()

然后在链接部分使用:

target_link_libraries(docparser_test
    PRIVATE
        docparser
        Qt${QT_VERSION_MAJOR}::Core
        $<IF:$<BOOL:${Qt6_FOUND}>,Dtk6::Core,Dtk::Core>
)

main.cpp 改进建议:

// 建议:将编码转换逻辑提取为独立函数,提高可测试性
static std::string convertToUtf8(const std::string& content, const QString& fromEncoding)
{
    if (fromEncoding.toLower() == "utf-8") {
        return content;
    }

    QByteArray in = QByteArray::fromStdString(content);
    QByteArray out;
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
    Dtk::Core::DTextEncoding::convertTextEncodingEx(in, out, "utf-8", fromEncoding);
#else
    Dtk::Core::DTextEncoding::convertTextEncoding(in, out, "utf-8", fromEncoding);
#endif
    return out.toStdString();
}

// 在main函数中使用
if (fromEncoding.toLower() != "utf-8") {
    content = convertToUtf8(content, fromEncoding);
}

3. 代码性能建议

  1. CMakeLists.txt:

    • 当前实现已经合理,没有明显的性能问题。
  2. main.cpp:

    • toLower() 调用可以优化为 compare(),避免创建临时字符串:
    if (fromEncoding.compare("utf-8", Qt::CaseInsensitive) != 0) {
        // ...
    }
    • 对于大文本处理,可以考虑使用 QByteArray::reserve() 预先分配空间。

4. 代码安全建议

  1. CMakeLists.txt:

    • 建议添加 Qt 版本检查,确保至少找到 Qt5 或 Qt6 中的一个:
    if(NOT Qt6_FOUND AND NOT Qt5_FOUND)
        message(FATAL_ERROR "Neither Qt6 nor Qt5 was found")
    endif()
  2. main.cpp:

    • 添加编码转换错误处理:
    #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
        if (!Dtk::Core::DTextEncoding::convertTextEncodingEx(in, out, "utf-8", fromEncoding)) {
            qWarning() << "Failed to convert encoding from" << fromEncoding;
            return content; // 返回原始内容或采取其他错误处理
        }
    #else
        if (!Dtk::Core::DTextEncoding::convertTextEncoding(in, out, "utf-8", fromEncoding)) {
            qWarning() << "Failed to convert encoding from" << fromEncoding;
            return content;
        }
    #endif

5. 其他建议

  1. 版本兼容性:

    • 考虑添加对 Qt4 的支持(如果需要):
    if(Qt6_FOUND)
        # ...
    elseif(Qt5_FOUND)
        # ...
    elseif(Qt4_FOUND)
        # Qt4 支持代码
    endif()
  2. 文档注释:

    • 为跨版本兼容的代码添加注释,说明不同版本的区别:
    // Qt6 使用 convertTextEncodingEx,Qt5 使用 convertTextEncoding
    // 主要区别在于错误处理和编码检测方式
    #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
        Dtk::Core::DTextEncoding::convertTextEncodingEx(in, out, "utf-8", fromEncoding);
    #else
        Dtk::Core::DTextEncoding::convertTextEncoding(in, out, "utf-8", fromEncoding);
    #endif

总结

这份代码修改整体质量良好,正确实现了 Qt5 和 Qt6 的兼容性。主要改进方向在于:

  1. 提高代码可读性和可维护性
  2. 增强错误处理
  3. 优化性能敏感部分
  4. 完善文档注释

这些改进将使代码更加健壮和易于维护。

@pppanghu77
Copy link
Copy Markdown
Contributor Author

deepin pr auto review

这份代码修改的主要目的是为了兼容 Qt5 和 Qt6 两个版本,同时对版权年份进行了更新。以下是对代码的详细审查和改进建议:

1. 语法逻辑审查

CMakeLists.txt 部分:

  • ✅ 逻辑正确:使用 if(Qt6_FOUND) 来判断 Qt 版本并进行相应的包查找。
  • ✅ 链接库处理正确:使用生成器表达式 $<IF:...> 根据条件选择不同的库进行链接。

main.cpp 部分:

  • ✅ 条件编译正确:使用 QT_VERSION_CHECK 宏来区分 Qt5 和 Qt6 的 API 调用。
  • ✅ 版权年份更新:从 2024 更新到 2024-2026,符合规范。

2. 代码质量建议

CMakeLists.txt 改进建议:

# 建议:显式定义 Qt 版本变量,提高可读性
if(Qt6_FOUND)
    set(QT_VERSION_MAJOR 6)
    find_package(Qt6 REQUIRED COMPONENTS Core Test)
    find_package(Dtk6 REQUIRED COMPONENTS Core)
else()
    set(QT_VERSION_MAJOR 5)
    find_package(Qt5 REQUIRED COMPONENTS Core Test)
    find_package(DtkCore REQUIRED)
endif()

然后在链接部分使用:

target_link_libraries(docparser_test
    PRIVATE
        docparser
        Qt${QT_VERSION_MAJOR}::Core
        $<IF:$<BOOL:${Qt6_FOUND}>,Dtk6::Core,Dtk::Core>
)

main.cpp 改进建议:

// 建议:将编码转换逻辑提取为独立函数,提高可测试性
static std::string convertToUtf8(const std::string& content, const QString& fromEncoding)
{
    if (fromEncoding.toLower() == "utf-8") {
        return content;
    }

    QByteArray in = QByteArray::fromStdString(content);
    QByteArray out;
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
    Dtk::Core::DTextEncoding::convertTextEncodingEx(in, out, "utf-8", fromEncoding);
#else
    Dtk::Core::DTextEncoding::convertTextEncoding(in, out, "utf-8", fromEncoding);
#endif
    return out.toStdString();
}

// 在main函数中使用
if (fromEncoding.toLower() != "utf-8") {
    content = convertToUtf8(content, fromEncoding);
}

3. 代码性能建议

  1. CMakeLists.txt:

    • 当前实现已经合理,没有明显的性能问题。
  2. main.cpp:

    • toLower() 调用可以优化为 compare(),避免创建临时字符串:
    if (fromEncoding.compare("utf-8", Qt::CaseInsensitive) != 0) {
        // ...
    }
    • 对于大文本处理,可以考虑使用 QByteArray::reserve() 预先分配空间。

4. 代码安全建议

  1. CMakeLists.txt:

    • 建议添加 Qt 版本检查,确保至少找到 Qt5 或 Qt6 中的一个:
    if(NOT Qt6_FOUND AND NOT Qt5_FOUND)
        message(FATAL_ERROR "Neither Qt6 nor Qt5 was found")
    endif()
  2. main.cpp:

    • 添加编码转换错误处理:
    #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
        if (!Dtk::Core::DTextEncoding::convertTextEncodingEx(in, out, "utf-8", fromEncoding)) {
            qWarning() << "Failed to convert encoding from" << fromEncoding;
            return content; // 返回原始内容或采取其他错误处理
        }
    #else
        if (!Dtk::Core::DTextEncoding::convertTextEncoding(in, out, "utf-8", fromEncoding)) {
            qWarning() << "Failed to convert encoding from" << fromEncoding;
            return content;
        }
    #endif

5. 其他建议

  1. 版本兼容性:

    • 考虑添加对 Qt4 的支持(如果需要):
    if(Qt6_FOUND)
        # ...
    elseif(Qt5_FOUND)
        # ...
    elseif(Qt4_FOUND)
        # Qt4 支持代码
    endif()
  2. 文档注释:

    • 为跨版本兼容的代码添加注释,说明不同版本的区别:
    // Qt6 使用 convertTextEncodingEx,Qt5 使用 convertTextEncoding
    // 主要区别在于错误处理和编码检测方式
    #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
        Dtk::Core::DTextEncoding::convertTextEncodingEx(in, out, "utf-8", fromEncoding);
    #else
        Dtk::Core::DTextEncoding::convertTextEncoding(in, out, "utf-8", fromEncoding);
    #endif

总结

这份代码修改整体质量良好,正确实现了 Qt5 和 Qt6 的兼容性。主要改进方向在于:

  1. 提高代码可读性和可维护性
  2. 增强错误处理
  3. 优化性能敏感部分
  4. 完善文档注释

这些改进将使代码更加健壮和易于维护。

只考虑当前情况是demo测试,不存在 支持qt4

@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: max-lvs, pppanghu77

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@pppanghu77
Copy link
Copy Markdown
Contributor Author

/forcemerge

@deepin-bot
Copy link
Copy Markdown
Contributor

deepin-bot Bot commented Apr 28, 2026

This pr force merged! (status: unstable)

@deepin-bot deepin-bot Bot merged commit 43a5784 into linuxdeepin:develop/20260424 Apr 28, 2026
20 of 21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants