为什么 qt 成为 c++ 界面编程的第一选择?

QT界面编程:优势、迁移与学习路径
本文探讨了为何开发者青睐QT作为界面编程首选,对比了QT与MFC的优缺点,包括QSS样式设计、跨平台能力、工具如QtDesigner和QtCreator,以及QT在嵌入式和专业应用中的现状。文章还提供了Qt学习资源链接。

一、前言

为什么现在越来越多的开发者选择QT作为界面编程的首选?

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目视频教程+代码,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

作为一位从事QT界面编程近8年的笔者,我曾经使用基于MFC的C++界面编程达5年之久。为什么我会从MFC转向QT呢?

主要原因是MFC在开发界面时,想要实现美观的界面设计非常困难,而且使用第三方基于MFC的界面库代码也比较混乱。

而当我了解到QT具有可进行QSS样式设计的功能时,我决定尝试一下。一旦项目移植到QT后,我认为MFC可以完全抛弃了,因为相比于QT,MFC存在太多的不足之处。

此外,MFC还有一个致命的缺陷,即无法跨平台。 当然,有些同学可能会问为什么不直接使用C#的WPF来进行界面编程呢?诚然,我们确实有一些项目和工具是使用C#进行开发的,C#和C++也可以相互调用,并且可以进行断点调试。但在性能方面,仍然存在一些损失。对于我们从事音视频和三维仿真项目的情况来说,这会对性能产生一定的影响,因此我们只在一些对性能要求不是极致的项目中使用C#。

二、QT历史

在说明了一些我们项目的情况后,接下来简要介绍一下QT的历史。了解历史的目的是为了判断使用该库是否存在风险,是否会停止更新,因为许多开源库在未实现商业化之前都会被终止开发。

  • QT由奇趣科技公司开发。
  • 2008年,诺基亚从奇趣科技公司收购了QT,并增加了LGPL的授权模式。
  • 2011年,芬兰的Digia从诺基亚收购了QT的商业版权,此后诺基亚负责QT在移动端的发展,而Digia负责QT的商业版。 QT在诺基亚智能手机盛行的时期达到了开发的巅峰。当时,许多塞班系统的手机应用都是基于QT开发的。然而,随着苹果和安卓的流行,塞班退出了历史舞台,而QT在手机开发领域的需求也被逐渐替代。不过,QT在嵌入式、电力系统和军工系统等领域一直没有被其他技术替代。 三、QT现在的应用情况 现在让我们了解一下QT目前的应用情况,主要考虑是否具有广泛的应用场景、就业机会是否广泛以及是否容易招聘到相关人才。 QT在嵌入式、电力系统、军工系统等需要与硬件进行交互的界面系统中得到了广泛应用。此外,许多专业的跨平台应用软件也采用QT进行开发。 在Digia接手QT之后,他们开发了安卓和iOS版本的QT,实现了一套程序可以在多个平台上运行。不过,目前尚不建议使用QT开发安卓和iOS应用,因为在这方面仍然存在一些问题,但肯定会越来越完善。

四、QT提供的工具

再看下QT提供了哪些工具,QT不仅提供了功能丰富的SDK开发包,还提供了强大的工具,这也是我们选择他的原因之一。

4.1. 基于VS的插件qt-vs-addin

最新版本提供了2013和2015的版本,旧的版本目前用不起来,但现在c++开发基本主流至少vs2013了。

4.22. Qt助手(手册)

qt的手册还是比较完备,并且包含了很多示例的源码。

4.33. 基于XML的界面设计器Qt Designer

便捷的解码设计,应该是c++领域最方便的界面设计器。

4.44. 跨平台的开发工具 QtCreator

跨平台的c++开发工具,应该是在linux上最方便的c++开发调试工具,就算不用QT库,也可以用它来开发跨平台的c++项目。

五、QT框架优势

最后我们看下QT有哪些具体优势

5.1. 工具丰富

这个前面已经对它的工具做了介绍。

5.2. 功能丰富

出了提供了界面库之外,还提供了音频库,3d库,数据库SDK,WebEngine,网络库等,让我们做跨平台程序变得简便。

5.3. 开源并跨平台

出了可以自己通过QT源码进行移植之外,qt官方就已经提供了再windows,Android,ios,linux中运行的SDK。

5.4. 架构的优势

这部分优势很多,我们列出一些示例,可以看出它的优势。

界面源码与用户源码的隔离,qt的策略是没有界面都会生成一个对应的源码,比如有一个界面设计文件xps.ui 它会解析其中的xml生成一个对应了ui_xps.h 文件,这个文件你不需要修改,如果要调用界面中的控件直接通过 Ui::XPSClass ui; 这个对象定义也是写在ui_xps.h中。也就是你的业务逻辑就和界面控件对象的创建和设置做了隔离。

事件处理的便捷(灵活的信号槽机制),qt提供了信号槽机制,可以很好的降低耦合,提升代码的复用性。

例如有这样一个需求,我的一个XMov类专门处理视频,但要把处理进度告知外部界面XSlider的对象,我处理方法,可以XMov提供接口给外部获取进度,或者是主动调用外部接口来刷新显示进度,第一种方法实时性得不到保障,并且界面端程序也需要引入XMov类头文件,也就是做了关联。第二种方法使得XMov类的耦合性加大,当界面发生变化是XMov类需要修改。QT中了信号槽机制可以让两个类XMov和XSlider关联起来,在XMov中直接定义一个信号函数void SetPos(int),直接绑定到XSlider对象的void SetPos(int) 槽函数,二者互相都不知道,降低耦合性。只在统一的入口类中将各个模块直接的信号槽关联起来。

XMov::run()
{
while(!sExit)
{
//处理视频
int pos = DealMove();
 
//发出信号,信号如果没有绑定,这步调用也不会出问题
SetPos(pos);
}
}
 
绑定方法
 connect(xmov,SIGNAL(SetPos(int)),xslider,SLOT(SetPos(int)))
这就是信号槽的一种好处,当然信号槽也是处理各类控件的自定义事件。

5.5. 及其便捷的样式设计(像开发web程序一样设计界面)

可以很容易的做一个圆角边框,并且有渐变效果,鼠标移上去还发生变化,可以参考下面的样式表,qss基本和css类似,包括支持css的选择器,可以通过类名,对象名,和父类名称来设置。

QPushButton:!hover
{
 
border-radius:5px;
}
QPushButton:hover /* hover 鼠标悬停*/
{
 
border-radius:5px; /*圆角边框*/
}

六、Qt学习路线

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目视频教程+代码,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

C++ Qt设计模式(第2版)是美国萨福克大学已使用十余年的经典教程,利用跨平台开源软件开发框架Qt阐释了C++和设计模式中的主要思想。全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零基础的C++初学者铺垫一条学习面向对象编程的快捷之路;第二部分讲解内存访问、继承等重要的C++特性,是前一部分的延伸和拓展;第三部分使用Phonon编写了一个多媒体播放器,展示了主要技术理念的应用方法;附录部分给出了C++保留关键字、Debian和Qt程序开发环境的配置等内容。每节的练习题和各章后面的复习题,既可作为课堂上的讨论题,也可进一步启发读者对于关键知识点的思考。 C++ Qt设计模式(第2版)目录 第一部分 设计模式与Qt 第1章 C++简介 2 第2章 类与对象 46 第3章 Qt简介 78 第4章 列表 85 第5章 函数 94 第6章 继承与多态 116 第7章 库与设计模式 163 第8章 QObject, QApplication,信号和槽 179 第9章 窗件和设计师 195 第10章 主窗口和动作 225 第11章 范型和容器 246 第12章 元对象,属性和反射编程 262 第13章 模型和视图 277 第14章 验证和正则表达式 302 第15章 XML解析 318 第16章 更多的设计模式 335 第17章 并发 353 第18章 数据库编程 376 第二部分 C++语言规范 第19章 类型与表达式 386 第20章 作用域与存储类 416 第21章 内存访问 431 第22章 继承详解 443 第三部分 编 程 作 业 第23章 MP3自动点唱机作业 456
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值