为何qt成为c++界面编程的第一选择

为何 qt成为c++界面编程的第一选择
1、 前言
为何如今QT愈来愈成为界面编程的第一选择,笔者从事qt界面编程已经有接近8年,在这以前我作C++界面都是基于MFC,也作过5年左右。当时为何会从MFC转到QT,主要缘由是MFC开发界面想作得好看一些十分困难,引用第三方基于MFC的界面库代码也是比较混乱,当时主要看到qt有qss样式设计这个功能,决定试下。当项目移植到到QT后,以为MFC真的是能够抛弃了,MFC相对于QT缺点实在太多。固然MFC还有一个致命的缺陷,无法跨平台。
固然有同窗可能说为何不直接使用C# WPF作界面,咱们一些项目和工具确实是用C#作的,C#和C++也确实能够互相调用,而且能够断点调试。但在性能上仍是有很多的损失。对于咱们作的音视频和三维仿真项目确实有影响,因此只在一些对性能没有极致要求的项目中使用C#。
2、 QT 历史
说了一些咱们项目的状况,再来简单介绍一下QT历史,知道历史的目的是要判断使用此库是否有风险,是否会中止更新,不少开源库没有作好商业化最终都是停掉了。
l QT由奇趣科技公司开发
l 2008 诺基亚从奇趣科技公司收购Qt, 并增长LGPL的受权模式
l 2011 芬兰的Digia从Nokia收购了Qt的 商业版权,今后Nokia负责Qt on Mobile, Qt Commercial由Digia负责
QT的开发的最高峰是在诺基亚智能手机如日中天的时候,那时候诺基亚塞班系统的手机应用大量都是基于QT,随着苹果和安卓的流行,塞班退出历史舞台。qt的手机端开发需求也基本被替代。但QT在嵌入式、电力系统、军工系统中应用一直没有被替代。
3、 QT 如今使用状况
了解一下他如今的状况,主要考虑应用场景是否多,就业是否广,人才是否好招聘。
QT被普遍应用于嵌入式、电力系统、军工系统等要与硬件交互的界面系统中,而且大量的专业的跨平台应用软件也是使用QT开发。
digia接手QT后开发出了安卓和IOS版本的QT,实现了开发一套程序能够在全平台运行。但目前不建议使用QT开发安卓和IOS应用,坑还比较多但确定会愈来愈完善。
咱们列出QT开发的软件:
1. 
Autodesk May阿凡达和功夫熊猫的3D动画制做软件
2. 
 在wps的目录中的能够看到QT的的dll库
3. 
4. 
 google earth
 
5. 
微软的skype
6. 
virtualbox(oracle的虚拟机软件)
(太多了就不一一列出了)
4、 QT 提供的工具
再看下QT提供了哪些工具,QT不只提供了功能丰富的SDK开发包,还提供了强大的工具,这也是咱们选择他的缘由之一。
1.  基于 VS 的插件 qt-vs-addin
最新版本提供了2013和2015的版本,旧的版本目前用不起来,但如今c++开发基本主流至少vs2013了。
 
 
2. Qt 助手 ( 手册 )
qt的手册仍是比较完备,而且包含了不少示例的源码。
 
 
3.  基于 XML 的界面设计器 Qt Designer
便捷的解码设计,应该是c++领域最方便的界面设计器。
 
 
4.  跨平台的开发工具 QtCreator
跨平台的c++开发工具,应该是在linux上最方便的c++开发调试工具,就算不用QT库,也能够用它来开发跨平台的c++项目。
 
 
5、QT 框架优点
最后咱们看下QT有哪些具体优点
1.  工具丰富
这个前面已经对它的工具作了介绍。
2.  功能丰富
出了提供了界面库以外,还提供了音频库,3d库,数据库SDK,WebEngine,网络库等,让咱们作跨平台程序变得简便。
3.  开源并跨平台
出了能够本身经过QT源码进行移植以外,qt官方就已经提供了再windows,Android,ios,linux中运行的SDK。
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.  及其便捷的样式设计(像开发 web 程序同样设计界面)
能够很容易的作一个圆角边框,而且有渐变效果,鼠标移上去还发生变化,能够参考下面的样式表,qss基本和css相似,包括支持css的选择器,能够经过类名,对象名,和父类名称来设置。
 
 
QPushButton:!hover
{
 
border-radius:5px;
}
QPushButton:hover /* hover 鼠标悬停*/
{
 
border-radius:5px; /*圆角边框*/
}

后面会陆续推出qt相关文章,这篇文章主要作简介,后面会分块详细讲解。
 

 老夏课堂 夏曹俊css

相关文章
相关标签/搜索