版本号比较实现

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

版本号打印

QVersionNumber version(1, 2, 3);
qDebug() << version; 
// 输出:1.2.3

转字符串

QString versionStr = version.toString();
qDebug() << versionStr; 
// 输出:"1.2.3"

子版本号

QVersionNumber v(1, 2, 3);
qDebug() << v.majorVersion(); // 输出:1
qDebug() << v.minorVersion(); // 输出:2
qDebug() << v.microVersion(); // 输出:3

从字符串导入版本号

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

是否为空

qDebug() << QVersionNumber(0, 0, 0).isNull(); 
// 输出:false
qDebug() << QVersionNumber().isNull(); 
// 输出:true

版本比较

QVersionNumber v1(1, 0, 0);
QVersionNumber v2(1, 2, 3);
qDebug() << (v1 == v2); 
// 输出: false
QVersionNumber v1(1, 2);
QVersionNumber v2(1, 2, 0);
qDebug() << (v1 == v2); 
// 输出:false
QVersionNumber v1(1, 2);
QVersionNumber v2(1, 2, 0);
qDebug() << (v1.normalized() == v2.normalized()); 
// 输出:true

获取相同的子版本号

QVersionNumber v1(1, 2);
QVersionNumber v2(1, 2, 0);
QVersionNumber v = QVersionNumber::commonPrefix(v1, v2);
qDebug() << v; 
// 输出:1.2

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

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"这样的版本号,分享给大家。

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;
}
### Modbus RTU 协议调试工具介绍 ModBus 是一款适用于 RTU 调试的工具,能够生成 CRC16 校验码,其准确性与知名软件 Modbus Poll 所生成的一致[^1]。这款工具对于需要进行 MODBUS RTU 设备调试的人来说非常有用。 此外,存在专门针对 Modbus RTU 主机端设计的调试工具,这类工具简化了调试流程,提升了开发效率,适合各类专业人士使用,包括但不限于工业自动化工程师、智能家居开发者以及能源管理人员[^2]。 还有一个开源项目提供了名为 “MODBUS (RTU调试工具)” 的资源文件,旨在帮助开发者在软硬件开发过程中更高效地完成 MODBUS RTU 协议的调试任务,从而保障设备间的稳定通信和可靠的数据交换[^3]。 #### 下载链接汇总 - 官方免费版下载页面:[系统之家](https://www.xitongzhijia.net/soft/) - 开源项目地址:<https://gitcode.com/open-source-toolkit/2a845> #### 使用教程概览 为了更好地理解和操作这些调试工具,下面给出了一般性的指导说明: ##### 准备工作 确保计算机已安装必要的运行环境和支持库;连接好待测设备,并确认物理链路畅通无阻。 ##### 工具配置 启动所选的 Modbus RTU 调试工具后,在界面内设置正确的串口参数(波特率、数据位数等),以便匹配目标设备的要求。 ##### 发送请求命令 利用图形化界面上的功能按钮构建并发送标准或自定义的消息帧给远程节点,观察返回的结果是否符合预期。 ##### 查看响应解析 当接收到回应包时,工具会自动计算校验值并与实际接收的内容对比验证有效性,同时展示详细的字段含义解释供分析参考。 ##### 日志记录功能 大多数高级版本都会配备日志保存选项,允许用户将整个交互过程导出成文本形式存档留作后续审查依据。 ```python import minimalmodbus as mbus instrument = mbus.Instrument('/dev/ttyUSB0', slaveaddress=1) # 创建仪器对象实例 instrument.serial.baudrate = 9600 # 设置波特率为9600bps data = instrument.read_register(0x0A, functioncode=3) # 读取寄存器值 print(f'Register value is {data}') # 输出获取到的数据 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值