Qt的跨平台的部分原理和机制

最近开始学习Qt,看的是徐野等写的《Qt平台体系与应用——Qt5.5+核心方法、技巧与案例》。Qt是一个跨平台的应用程序框架。实现原理是一次编码,处处编译(即是在windows和linux写的代码都一样,跨平台。但是需要在Windows和linux上分别编译,才能在那种环境下运行。针对不同的安装设备,有不同的Qt版本)。

(以下是这本书的,关于跨平台的原理的对比和介绍,感觉不错,摘写)
java也是跨平台的。但是从实现技术角度来看,它比Qt简单。java是把针对不同平台与操作系统的跨系统核心代码抽象出来,形成单独的JVM层(java virtual machine),也就是大家熟知的java虚拟机。java代码运行在JVM上,把跨平台java语言框架问题分解为在不同平台上设计JVM的问题,结构简单、逻辑清晰、易于实现(我自己,觉得就像c语言里的switch-case结构,linux结构则如何,windows则如何)。java语言设计本身不受平台的任何限制,可集中精力设计出受人欢迎的程序设计语言。只要针对不同大类的平台开发相应的JVM,代码就可以跨平台实现。
当然,java也为此付出了运行效率的代价。因为一般程序直接通过操作系统由CPU执行,而java语言需要先通过JVM再映射到操作系统里,最后由CPU执行,执行过程多了一步。早期由于java语言主要使用解释性编译器,从而导致运行效率进一步降低。但是随着即时编译技术(JIT)的推出,尤其是硬件计算速度的大幅提升,java运行效率问题得以解决。
Qt平台并没有使用类似JVM的明显抽象层(但是原理类似,它底层封装了针对不同平台的类库,API之类的,只是这些都被上层做了封装,对开发者来说操作各种平台的接口都是一样的),因此在框架开发过程中处理各种平台问题的复杂性要超过java。

跨平台程序设计的难点在于兼容不同平台的进度调度、消息管理和文件处理等操作系统内核模块。按常规理解,如果开发一个跨平台程序设计框架,则需要抽象出所有支撑平台核心模块的原理和特色,然后针对每个所提供的功能API分别实现,工作量大增。Qt就采用了这种方式,为不同用户针对不同平台的开发提供了所对应的程序包(难怪会有针对不同操作系统的Qt包),而且Qt针对核心模块进行了简易化抽象处理,以较小的代价2兼容所有平台。
以消息管理为例,Windows消息管理大致分为时间函数产生消息、消息传递到目标事件函数、目标函数处理消息3个步骤。但Qt处理消息管理采用了信号/槽机制,将传统的3步操作缩减到2步,通过connect函数将事件产生函数(信号)直接连接到目标事件处理函数(槽)。事件处理简单有效,易于实现兼容各种版本的操作系统。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值