一、前言
为什么现在越来越多的开发者选择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模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
QT界面编程:优势、迁移与学习路径
本文探讨了为何开发者青睐QT作为界面编程首选,对比了QT与MFC的优缺点,包括QSS样式设计、跨平台能力、工具如QtDesigner和QtCreator,以及QT在嵌入式和专业应用中的现状。文章还提供了Qt学习资源链接。
3408

被折叠的 条评论
为什么被折叠?



