【Qt】为什么Qt是你选择的理由?

目录

客户端

图形化界面

Windows环境下可以开发GUI的方案

Qt介绍

Qt的发展史

Qt所支持的平台

Qt版本

Qt的优点

Qt的应用场景

Qt的行业发展方向

Qt的发展前景

使用Qt的成功案例


一般来说,计算机的岗位有四种,分别是:

  • 后端
  • 前端
  • 测试
  • 运维

在前端开发中,存在着三种常见的前端开发场景:

  • 网页前端开发(做网页的)
  • 桌面应用开发(做电脑上的应用程序开发的)
  • 移动应用开发(做手机上的应用程序开发的)

而Qt是使用于前端开发中的桌面应用开发种的"客户端开发"的。

客户端

客户端:客户端是直接和用户打交道的这一端的程序。例如:chrome、qq音乐、steam等等。

一般来讲,在联网的情况之下,客户端的背后是服务器,客户端一般来讲是服务器所支撑着的。但是并非所有的客户端程序的背后都需要服务器的,例如计算机,画图板等等也是不需要服务器的。

换一种方式来讲,"客户端程序"也是直接与客户进行交互的。所以,准确来讲,Qt特指用来进行桌面应用开发(电脑上写的程序)种所涉及的一套技术,Qt是无法进行开发网页前端额移动应用的。

【注意】关于移动应用的开发,目前Qt官方也是支持移动应用的开发的,但是目前还没有较为知名的商用移动应用程序是Qt开发的。

在客户端进行开发的过程中,其重要任务是:编写和用户交互的界面。

图形化界面

在与用户进行交互的界面中,俩种典型的风格是:

  1. 命令行界面或者终端界面(黑框框)
  2. 图形化界面

命令行界面,也就是文本用户界面TUI,是指文本用户界面(Text-based User Interface),通过文本实现交互窗口展示内容,定位光标和鼠标实现用户交互。这种场景主要被专业人员使用,例如程序员。

图形化界面,是图形化用户界面GUI,图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。其使用场景是普通用户。

Qt是用编写桌面的GUI程序的一套框架。

在Windows环境下,可以使用多种解决方案来编写GUI程序,Qt只是其中的一种。

Windows环境下可以开发GUI的方案

在Windows环境下,可以开发GUI的方案(根据历史进程介绍):

  • Windows API:Windows API 就是Windowsying,是针对Microsoft Windows操作系统家族的系统编程接口,这种Windows系统所提供的原生API,开发起来非常原始,也非常繁琐。
  • MFC:微软基础类(Microsoft Foundation Classes),同VCL类似,是一种Application Framework,随微软Visual C++开发工具发布。目前最新版本为9.0(截止2008年11月)。该类库提供一组通用的可重用的类库供开发人员使用。大部分类均从CObject 直接或间接派生,只有少部分类例外。在上个世纪的90年代,其影响力非常深远,而且在当时MFC与VC6.0可以算是旗鼓相当的。
  • Qt:Qt是1991年左右诞生的,与MFC不同,MFC已经很多年没有进行更新了,而Qt处于现在的环境中,依旧在不停的更新出新版本,具有很强的生命力

除此之外,GTK、WXwidge的影响力不是很大。

  • GTK(Gnome Toolkit)是一套跨多种平台的图形工具包,按LGPL许可协议发布的。虽然最初是为GIMP写的,但早已发展为一个功能强大、设计灵活的通用图形库。特别是被GNOME选中使得GTK+广为流传,成为Linux下开发图形界面的应用程序的主流开发工具之一,当然GTK+并不要求必须在Linux上,事实上,目前GTK+已经有了成功的windows版本。
  • wxwidgets是一个 c++编写的用来提供gui开发的框架。它包含一个可以支持现今几乎所有操作系统(Version 2 currently supports all desktop versions of MS Windows, Unix with GTK, Unix with Motif, and MacOS. An OS/2 port is in progress.)的GUI库和其他一些很有用的工具,提供了类似MFC的功能。

这些方案都是基于C/C++搭建出来的一些GUI开发的技术体系。

与此同时,微软在之后自发的创建出一种新的编程语言C#(C sharp)。

  • WPF:WPF 是.NET 框架的一部分,它提供了丰富的图形和多媒体功能,支持数据绑定、样式、模板、动画等特性,能够创建具有现代化外观和强大交互功能的桌面应用程序界面。
  • UWP 即通用 Windows 平台(Universal Windows Platform),是微软在 Windows 10 中推出的应用程序架构。
  • Electron:Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用程序的开源框架。它结合了 Chromium 引擎(用于渲染界面)和 Node.js 运行时(用于后端逻辑),使得开发者能够使用前端开发技术创建具有原生应用体验的桌面应用。其本质上是把基于HTML这样的网页,打包成一个Windows上运行的客户端程序。

Electron这个技术体系最初是用来开发"atom"这个文本编辑器的,atom是Github开发的,但是后续atom被微软开发的VSCode所代替。

使用Electron的缺点是,Electron开发出来的程序,其运行速率是低于之前原生开发的技术体系的。

总而言之,Qt虽然仅仅是众多解决方案中的一种,但是价值还是蛮高的,使用Qt的商业公司的产生的产品也是非常多的。

Qt相比较其他的方案最明显的优势是:可以支持Windows、Linux、max等平台。

Qt介绍

Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供了建立艺术级图形界面所需的所有功能。Qt是完全面向对象的,很容易扩展。Qt为开发者提供了一种基于组件的开发模式,开发者可以通过简单的拖拽和组合来实现复杂的应用程序,同时也可以使用C++语言来进行高级开发。

【框架】:本质上就是一些大佬发明的,可以让普通程序员写出的代码变得更加靠谱。

一个程序越自由,越灵活,也就意味着越容易出现问题,一个优秀的框架可以限制程序员的出错率,同时也就保证出错成本。在C++学习的过程中,有库这个概念,而库和框架的类似之处就是其都是大佬将代码实现完成,供别人使用的,二者不同之处在于库是被程序员所调用的,即库是主体;而框架则是主体,程序员配合框架,完善填充框架中流出的一些细节。

学习过Java这个编程语言,对于框架来说是并不陌生的,而对于C++工程师,在编写C++代码的时候,框架也是十分重要的。C++的生态是割裂的,离散的,这与Java不同,Java存在着一些spring这样的社区,但是在C++不同的开源社区或者大厂公司中,也都会拥有各自的框架。

相比之下,像Qt这种能够被大家共同认可的框架,在整个C++生态中都是不多见的。

【图形用户界面】:指的是采用图形方式显示的计算机操作用户界面,是计算机与使用者之间的对话接口,是计算机系统的重要组成部分。

Qt的发展史

  • 1991年,Qt最早由奇趣科技开发。
  • 1996年,Qt进入商业领域,同时也是目前流行的Linux桌面环境KDE的基础。
  • 2008年,奇趣科技被诺基亚公司收购,Qt成为了诺基亚旗下的编程工具。
  • 2012年,Qt又被Digia公司收购。
  • 2014年,在4月份跨平台的集成开发环境Qt Creator3.1.0发布,同年5月20日发布了Qt5.3正式版本,至此Qt实现了对iOS、Android、embedded等各平台的的全面支持。

在计算机的1991年,诞生了很多有意思的产物:Qt、python、vim、openGL、Linux...

对于诺基亚手机,起初的塞班系统是最早的智能手机系统,在当时,诺基亚就主推Qt作为开发塞班系统应用程序的解决方案,但是随着诺基亚公司的崩塌对于Qt的影响也是极大的。

这里想说明一点,时代的更替速度是很快,把握当下,开辟未来,享受过去。

Qt所支持的平台

  • Windows-XP、Vista、Win7、Win8、Win2008、Win10
  • Unix/X11 - Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX、FreeBSD、BSD/OS、和其他很多X11平台。
  • Macintosh - Mac OS X
  • Embedded - 有帧缓冲支持的嵌入式Linux平台,Windows CE。
  • Android

在上述所支持的平台中,简单说明就是:

  • Windows(各个版本)
  • Linux(各个发行版本,尤其是Linux中的KDE桌面基于Qt构建的)
  • Mac系统
  • 嵌入式系统

【Linux平台】:Linux主要是给服务器使用的,服务器不需要图形化界面(TUI:基于命令操作,门槛更高,效率也就更高;GUI:基于图形化界面,门槛低,效率也就更低),但是也有少数用户使用Linux作为界面,在Linux桌面环境中,存在着多套桌面环境,例如:GNOME(基于GTK构建的),KDE(基于Qt构建的),但是Linux桌面在使用过程中存在着诸多问题。

【嵌入式系统平台】:嵌入式系统也是Qt实际开发中的一个主要场景,嵌入式系统需要低配置以及低成本。嵌入式系统一般使用在日常生活中,比如冰箱、洗衣机、路由器、投影仪等等,这些设备的内部也是有计算机的,但是这些设备里面的计算机硬件配置不是很高。

有些嵌入式系统,也是需要运行图形化界面的程序的,这个时候Qt的作用还是蛮大的,尤其是在一些工业领域中,但是,随着时代的更替,在工业领域中,Qt也收到了Android的挑战。

Qt版本

目前来说,其最新版本是Qt6,但是相对于Qt6和Qt5之间的核心功能区别不大,并且企业中也仍然有大量的项目使用Qt5,后续的我会以Qt5来进行输出。

【注意】在软件开发中,并非是越新越好,在进行商业开发的时候,相比引入新的特性,不如优先确保不引入严重的问题。

同时,Qt在发布的时候还提供了俩种许可证:

  • 商业许可:开发者以商业目的使用Qt框架进行开发和发布软件的许可,开发者需要购买商业许可并按照相关规定使用Qt框架。商业许可提供了更多的功能和服务,适合于商业软件开发。
  • 开源许可:开发者以非商业目的使用Qt框架进行开发和发布软件的许可,开发者可以免费使用Qt框架,但需要遵守开源许可协议的要求,例如在软件中包含Qt许可协议的声明等。

Qt的优点

  • 跨平台,几乎支持所有的平台
  • 接口简单,容易上手,学习Qt框架对学习其他的框架有参考意义。
  • 一定程度上简化了内存回收机制。
  • 开发效率高,能够快速的构建应用程序。
  • 有很好的社区氛围,市场份额在缓慢上升。
  • 可以进行嵌入式开发。

Qt的应用场景

  • 桌面应用程序

Qt能够创建各种类型的桌面应用程序,包括文件管理器、媒体播放器、绘图程序等等。Qt应用程序支持多种操作系统,可以运行在Windows、Linux、macos等桌面操作系统上。

  • 移动应用程序

Qt支持Android和IOS移动操作系统,为应用提供了强大的跨平台能力。可以使用Qt构建各种移动应用程序,如社交应用、游戏、娱乐等等。

  • 嵌入式系统

Qt在嵌入式领域中的应用也是非常广泛的,它可以构建面向各种设备的图形应用程序,在机顶盒、车载娱乐系统、安防监控设备等领域具有广泛的应用。

Qt的行业发展方向

Qt 是⼀个强⼤且⼴泛应⽤于跨平台软件开发的框架。它提供了丰富的⼯具和库,可⽤于开发⾼质量、 ⾼效率的图形⽤⼾界⾯(GUI)应⽤程序。并且可以在 Windows、linux、macOS 等多种操作系统上 运⾏。随着⾏业的发展,Qt的重要性也逐渐体现出来。

  • 物联网(loT)和嵌入式系统的发展

在当下的嵌⼊式和物联⽹⾏业中,Qt 的作⽤逐渐得到了体现,因为可以⽤它来开发具有 GUI 界⾯的嵌 ⼊式应⽤程序,这对于智能家居、汽⻋以及医疗设备等领域来说,具有⾮常重要的作⽤。

  • 自动驾驶和智能交通领域

现在很多的汽⻋都引⼊了⾃动驾驶的技术,⽽ Qt 在其中也有着⼴泛的应⽤,它可以开发⻋载嵌⼊式系 统和⽤⼾界⾯程序。随着未来⾃动驾驶技术的发展,Qt 在这⽅⾯的需求也会不断地增多。

  • 游戏开发

Qt 有⼀些⾮常重要的功能模块,例如 Qt 3D Studio,可以应⽤于游戏开发。未来游戏⾏业的持续发展,Qt在游戏⾏业的发展将会越来越多。

Qt的发展前景

Qt 在各个⾏业的应⽤逐渐⼴泛起来,对于掌握 Qt 开发能⼒的⼈员需求也在不断增加,因此在就业⽅⾯,相对⽐于其他⾏业来说,Qt 就业⾯更⼴,选择性更多。 同时Qt 作为⼀项专业技能,掌握此项技术的开发者获得的薪资报酬也是⾮常可观的,具有更多的职业发展 机会。
总之,如果掌握了 Qt 开发技术,未来的发展前景还是⾮常不错的。

使用Qt的成功案例

  • Linux桌面环境KDE
  • WPS Office办公软件
  • 谷歌地图
  • VLC多媒体播放器
  • Wireshark:网络协议分析工具,用于捕获和分析网络数据包。
  • VirtualBox:虚拟机软件,允许用户在一台计算机上运行多个操作系统。
  • Autodesk Maya:知名的三维建模、动画和渲染软件。
  • Qt Creator:Qt 自身的集成开发环境(IDE)。
  • Krita:数字绘画软件,提供丰富的绘图工具和特效。
  • Calibre:强大的电子书管理软件。
相关推荐
魔道不误砍柴功2 分钟前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
闲晨5 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程32 分钟前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk1 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*2 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue2 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man2 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
Mr.Q3 小时前
Qt多边形填充/不填充绘制
qt
萧鼎3 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸3 小时前
【一些关于Python的信息和帮助】
开发语言·python