一、前言

为什么现在QT越来越成为界面编程的第一选择,笔者从事qt界面编程已经有接近8年,在这之前我做C++界面都是基于MFC,也做过5年左右。当时为什么会从MFC转到QT,主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MFC的界面库代码也是比较混乱,当时主要看到qt有qss样式设计这个功能,决定试下。当项目移植到到QT后,觉得MFC真的是可以抛弃了,MFC相对于QT缺点实在太多。当然MFC还有一个致命的缺陷,没法跨平台。

当然有同学可能说为什么不直接使用C# WPF做界面,我们一些项目和工具确实是用C#做的,C#和C++也确实可以互相调用,并且可以断点调试。但在性能上还是有不少的损失。对于我们做的音视频和三维仿真项目确实有影响,所以只在一些对性能没有极致要求的项目中使用C#。

二、QT历史

说了一些我们项目的情况,再来简单介绍一下QT历史,知道历史的目的是要判断使用此库是否有风险,是否会停止更新,很多开源库没有做好商业化最终都是停掉了。

l QT由奇趣科技公司开发

l 2008 诺基亚从奇趣科技公司收购Qt, 并增加LGPL的授权模式

l 2011 芬兰的Digia从Nokia收购了Qt的商业版权,从此Nokia负责Qt on Mobile, Qt Commercial由Digia负责

QT的开发的最高峰是在诺基亚智能手机如日中天的时候,那时候诺基亚塞班系统的手机应用大量都是基于QT,随着苹果和安卓的流行,塞班退出历史舞台。qt的手机端开发需求也基本被替代。但QT在嵌入式、电力系统、军工系统中应用一直没有被替代。

三、QT现在使用情况

了解一下他现在的情况,主要考虑应用场景是否多,就业是否广,人才是否好招聘。

QT被广泛应用于嵌入式、电力系统、军工系统等要与硬件交互的界面系统中,并且大量的专业的跨平台应用软件也是使用QT开发。

digia接手QT后开发出了安卓和IOS版本的QT,实现了开发一套程序可以在全平台运行。但目前不建议使用QT开发安卓和IOS应用,坑还比较多但肯定会越来越完善。

我们列出QT开发的软件:

1.Autodesk May:阿凡达和功夫熊猫的3D动画制作软件

2.WPS:在wps的目录中的可以看到QT的的dll库

3.金山词霸

4.google earth

5.微软的skype

6.virtualbox(oracle的虚拟机软件)

(太多了就不一一列出了)

四、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++项目。

五、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

{

background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(120, 120, 120, 255), stop:0.495 rgba(39, 39, 39, 255), stop:0.505 rgba(39,39, 39, 255), stop:1 rgba(120, 120,120, 255));

border-radius:5px;

}

QPushButton:hover /* hover 鼠标悬停*/

{

background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(39, 39, 39, 255), stop:0.495 rgba(120, 120, 120, 255), stop:0.505 rgba(120,120, 120, 255), stop:1 rgba(39, 39,39, 255));

border-radius:5px; /*圆角边框*/

}

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

更多内容也可以关注我的51cto学院中的视频课程

更多的资料也可以关注我51cto上的视频课程

夏老师的课堂 http://edu.51cto.com/lecturer/12016059.html

C++QT5跨平台界面编程原理和实战大全视频课程

http://edu.51cto.com/course/11507.html

转载于:https://blog.51cto.com/xiacaojun/1982219

为什么qt成为c++界面编程的第一选择相关推荐

  1. linux QT 结束当前进程_软件特攻队|为什么 Qt 成为 c++ 界面编程的第一选择?

    一.前言 为什么说QT越来越成为界面编程的第一选择,这要从当初为什么从MFC转到QT开始说.若想把MFC开发界面想做得好看一些是十分困难的一件事,引用第三方基于MFC的界面库代码也比较混乱,而当时看到 ...

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

    关注+星标公众号,不错过精彩内容 转自 | 技术让梦想更伟大 来源: https://blog.csdn.net/jiedichina/article/details/78547067 Qt可以说是U ...

  3. Scratch、Python、C++,谁才是少儿编程的第一选择?

    前言 面对市面上形形色色的编程语言类型,经常有家长犯难问我们该如何为孩子选择合适的课程: "那种拖块看起来像玩游戏,不如 Python.C++ 这样的代码编程语⾔⾼级." &quo ...

  4. 关于少儿编程编程语言的选择,python还是c++

    A.方向一:往计算机专业方面走,建议选择C++ (1).现在的算法竞赛用的是C++语言,实际上如果对编程语言比较了解的话,倒不如说是C语言加上了C++ 的STL,用的还是C语法,C++的面向对象基本上 ...

  5. Qt图形界面编程入门(4)

    构造函数和析构函数 构造函数是一个与类同名的特殊的公有成员函数. 创建类对象时构造函数会被调用,且只调用一次/ 构造函数无返回类型. ·  默认构造函数格式: 类名(){.......} Accoun ...

  6. Qt学习之界面UI编程应用

    Qt作为c++的GUI编程框架,在Qt4时代,一直是传统的基于QtWidget的C++编程,而到了Qt5,为了适用当前的移动应用开发浪潮,Qt提供了,另一套界面框架QtQuick,它是基于QML语言( ...

  7. Python界面编程第八课:Pyside2 (Qt For Python)打开关于窗口

    先上代码: from PySide2.QtWidgets import QApplication, QWidget, QMessageBox, QPushButton import sys from ...

  8. 《Qt图形界面编程入门》课后习题全解

    代码地址 https://github.com/duganlx/QT 说明 以下答案并非来自官方,而是本人自己实现的,若有啥问题,欢迎讨论(^-^) 所基于的书籍为<Qt图形界面编程入门> ...

  9. Python界面编程第十三课:Pyside2 (Qt For Python)GridLayout网格布局

    GridLayout 是什么? QGridLayout 是控制网格布局的类. QGridLayout 会占据它的可用空间(通过父布局或parentWidget(),将其划分为行和列,并将其管理的每个控 ...

最新文章

  1. 在Hadoop系统中运行WordCount案例失败解决方法
  2. 7.28Assignment
  3. SQL Server游标
  4. [转]easyui常用控件及样式收藏
  5. unity3d多个版本共存
  6. 从零开始做UI-静电的sketch设计教室 视频教程
  7. C#50个经典小程序代码
  8. FPGA学习之Cyclone器件资源结构知识介绍
  9. js——行间样式与非行间样式
  10. python青少年趣味编程-青少年趣味编程Python系列课程--2018-07-17
  11. MySQL进阶:触发器
  12. 实例10:四足机器人运动学逆解可视化与实践
  13. Vue框架学习(第十三课)Vuex状态管理中的store和state属性
  14. 苹果电脑全系换上自研芯片,除了不能打电话,比iPhone 12亮眼多了
  15. 2021年熔化焊接与热切割考试题及熔化焊接与热切割模拟考试题
  16. java判断浏览器杂项_java简单代码判断浏览器代码
  17. 贪心算法:区间调度-射气球问题
  18. 高校毕业求职难?“百日千万”网络招聘活动解决你的难题
  19. 学计算机大学生买什么牌子电脑,大学生买手提电脑什么牌子好
  20. CGB2102随堂笔记

热门文章

  1. Python 重写一个提取字符串中行政区划的 Series(上)
  2. Linux内核定标准定时器
  3. 西门子精智触摸屏故障问题处理汇总(黑屏+白屏+花屏等)
  4. 分拣机器人现场安装过程实录
  5. 全网最详细的Mac下搭建Appium环境文档,没有之一
  6. 【STM32】HAL库-以太网外设-LAN8720A-LWIP-无操作系统
  7. c# 计算空格宽度像素_关于C#中换算像素和毫米的说明
  8. screen使用方法
  9. SCU - 4438(字符串hash)
  10. 设置tablayout选中文字颜色和背景图片