Qt中QVersionNumber类两种使用方式的差异咨询
QVersionNumber两种写法的核心区别
写法A(有效)
QVersionNumber imageVersion = QVersionNumber::fromString(payloadRegex_image.cap(3)); QString imageVersionString(imageVersion.toString());
- 这里调用的是
QVersionNumber的静态工厂方法fromString,它会接收传入的版本字符串,内部完成版本解析和对象实例化,返回一个已经初始化好的、有效的QVersionNumber对象,直接赋值给imageVersion。后续调用toString()自然能得到正确的版本字符串。
写法B(无效)
QVersionNumber imageVersion; imageVersion.fromString(payloadRegex_image.cap(3)); QString imageVersionString(imageVersion.toString());
- 第一步默认构造的
imageVersion是一个空的、无效的版本对象(没有任何版本段信息)。 - 第二步调用的
fromString是静态方法,C++允许通过对象调用静态方法,但这本质还是调用静态逻辑,不会修改当前imageVersion对象的内容——静态fromString只会返回新的QVersionNumber实例,但你没有接收这个返回值,所以imageVersion依然是默认构造的空对象。 - 最后调用
toString()自然只能得到空字符串,导致逻辑失效。
如果想用成员方法的方式初始化,应该用QVersionNumber的parseFromString成员函数,它会修改当前对象并返回解析是否成功,正确写法示例:
QVersionNumber imageVersion; bool parseSuccess = imageVersion.parseFromString(payloadRegex_image.cap(3)); if (parseSuccess) { QString imageVersionString = imageVersion.toString(); }
内容的提问来源于stack exchange,提问作者Sudhanshu Ojha
相关产品推荐
相关产品推荐

