查看完整版本: [-- 关于Qt几百个版本无法兼容的深度思考 --]

QTCN开发网 -> Qt基础编程 -> 关于Qt几百个版本无法兼容的深度思考 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

liudianwu 2021-07-01 15:34

关于Qt几百个版本无法兼容的深度思考


关于Qt众多版本(至少几百个)都不兼容的问题,在经过和Qt中国的林斌大神和其他大神(Qt非官方技术交流群)头脑风暴以后,最终得出以下的结论。
- Qt在二进制兼容这块,已经做了最大的努力,通过将各种代码细节隐藏,Q指针+D指针技巧,尽量保持了接口的统一;
- 是否兼容最主要考虑编译器的因素,毕竟任何Qt版本都是需要通过编译器编译成对应的二进制文件,由他说了算。如果两个Qt版本采用的编译器版本一样,极大概率可执行文件是兼容的,比如 Qt5.10+msvc2015 32 位 和 Qt5.11+msvc2015 32位 编译出来的可执行文件,都用Qt5.11的库是可行的;
- mingw编译器的Qt版本也是如此,就是因为Qt官方安装包集成的mingw编译器一直在更新(极少附近版本没有更新mingw编译器版本除外),比如5.7用的mingw53,5.12用的mingw73,5.15用的mingw81,因为带的Qt库也是这个编译器编译出来的,所以导致看起来全部不兼容;
- 如果想要完全兼容,还有一个注意要素,那就是对应代码使用的类的头文件接口是否变了,按道理原有的接口极少会变,一般都是新增加,或者大版本才会改变,比如Qt4-Qt5-Qt6这种肯定没法兼容的,接口和模块都变了;
- 大胆的猜测:如果Qt5.6到Qt5.15你全部用一种编译器比如mingw73或者msvc2015重新编译生成对应的Qt运行库,然后在此基础上开发程序,最后生成的可执行文件用Qt5.15的库是都可以的,这样就轻松跨越了多个版本兼容;
- 大胆的建议:在附近的几个版本统一编译器,比如5.6-5.12之间就统一用mingw53或者msvc2015,5.12-5.15统一用msvc2017,要尝鲜其他编译器的可以自行源码编译其他版本,这样最起码附近的一大段版本(大概2-3年的版本周期)默认就兼容了。
- 本人测试的是widget部分,qml未做测试,不清楚是否机制一样;

liulin188 2021-07-01 17:38
楼主谈谈qml的看法

snow_man_0 2021-07-01 19:01
实际上,小版本之间有存在接口的变化。追求完全兼容,会限制接口变化、加大开发难度,我是觉得没有必要

uidab 2021-07-02 07:10
    
彻底兼容不容易,因此我们都是直接统一版本。不考虑太多,或者直接给代码,让他自己编译。

修理工小刘 2021-07-09 16:43
版本兼容搞死人

kenbe 2021-07-10 11:17
这个问题一直困扰软件开发人员,并且接口一直不变也是很难做到。


查看完整版本: [-- 关于Qt几百个版本无法兼容的深度思考 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled