前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >版本号比较实现

版本号比较实现

作者头像
Qt君
发布2023-03-17 15:27:16
7560
发布2023-03-17 15:27:16
举报
文章被收录于专栏:跟Qt君学编程

  项目使用QVersionNumber实现版本号比较的一些例子。

版本号打印

代码语言:javascript
复制
QVersionNumber version(1, 2, 3);
qDebug() << version; 
// 输出:1.2.3

转字符串

代码语言:javascript
复制
QString versionStr = version.toString();
qDebug() << versionStr; 
// 输出:"1.2.3"

子版本号

代码语言:javascript
复制
QVersionNumber v(1, 2, 3);
qDebug() << v.majorVersion(); // 输出:1
qDebug() << v.minorVersion(); // 输出:2
qDebug() << v.microVersion(); // 输出:3

从字符串导入版本号

代码语言:javascript
复制
QString str1 = "x.x.x"; // 导入无效的字符串
qDebug() << QVersionNumber::fromString(str1).toString(); 
// 输出: ""
代码语言:javascript
复制
QString str2 = "1.2.3"; // 导入有效字符串
qDebug() << QVersionNumber::fromString(str2).toString(); 
// 输出: "1.2.3"
代码语言:javascript
复制
QString str3("1.2.3-beta"); // 导入有效字符串
qDebug() << QVersionNumber::fromString(str3).toString(); 
// 输出: "1.2.3"
代码语言:javascript
复制
QString str4("1.2"); // 导入有效字符串
qDebug() << QVersionNumber::fromString(str4).toString(); 
// 输出: "1.2"
代码语言:javascript
复制
QString str5("1"); // 导入有效字符串
qDebug() << QVersionNumber::fromString(str5).toString(); 
// 输出: "1"

是否为空

代码语言:javascript
复制
qDebug() << QVersionNumber(0, 0, 0).isNull(); 
// 输出:false
qDebug() << QVersionNumber().isNull(); 
// 输出:true

版本比较

代码语言:javascript
复制
QVersionNumber v1(1, 0, 0);
QVersionNumber v2(1, 2, 3);
qDebug() << (v1 == v2); 
// 输出: false
代码语言:javascript
复制
QVersionNumber v1(1, 2);
QVersionNumber v2(1, 2, 0);
qDebug() << (v1 == v2); 
// 输出:false
代码语言:javascript
复制
QVersionNumber v1(1, 2);
QVersionNumber v2(1, 2, 0);
qDebug() << (v1.normalized() == v2.normalized()); 
// 输出:true

获取相同的子版本号

代码语言:javascript
复制
QVersionNumber v1(1, 2);
QVersionNumber v2(1, 2, 0);
QVersionNumber v = QVersionNumber::commonPrefix(v1, v2);
qDebug() << v; 
// 输出:1.2

如果当前版本号包含在其他版本号中,则返回true,否则返回false

代码语言:javascript
复制
QVersionNumber v1(1, 2);
QVersionNumber v2(1, 2, 3);
bool value = v1.isPrefixOf(v2);
qDebug() << value; 
// 输出:true

另外,最近在看QtCreator源码,找到了版本号比较的实现,只能比较"1.0","1.1",不支持比较"1.0.0"这样的版本号,分享给大家。

代码语言:javascript
复制
static bool compareVersions(const QString &version1, const QString &version2, bool allowHigherVersion)
{
    if (version2.isEmpty())
        return true;
    if (version1 == version2)
        return true;
    if (!allowHigherVersion)
        return false;
    QStringList version1List = version1.split(QLatin1Char('.'));
    QStringList version2List = version2.split(QLatin1Char('.'));
    if (version1List.count() == 2 && version2List.count() == 2) {
        bool ok;
        int major1 = version1List.constFirst().toInt(&ok);
        if (!ok)
            return false;
        int major2 = version2List.constFirst().toInt(&ok);
        if (!ok)
            return false;
        if (major1 >= major2) {
            int minor1 = version1List.constLast().toInt(&ok);
            if (!ok)
                return false;
            int minor2 = version2List.constLast().toInt(&ok);
            if (!ok)
                return false;
            if (minor1 >= minor2)
                return true;
        }
    }

    return false;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 版本号打印
  • 转字符串
  • 子版本号
  • 从字符串导入版本号
  • 是否为空
  • 版本比较
  • 获取相同的子版本号
  • 如果当前版本号包含在其他版本号中,则返回true,否则返回false
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档