本文字数:1660,阅读时长大约:15分钟

世界上的GUI库多如牛毛,有的开源,有的收费,有的可以做手机app开发,有的可以做桌面应用,有的只能用在某个系统,有的支持跨平台。基于不同的编程语言,人们又开发出不同的图形框架,比如Java有AWT、Swing;C#有WinForm和WPF;C++有MFC、QT、wxWidgets等。在C++的库中,QT凭借对跨平台的支持、简单易用、开发效率高等特性,成为最受欢迎的GUI库之一。

一、Qt是什么

引用百度百科一句话概括:“Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。”

Qt支持市场上常用的操作系统,并且开发出的图形界面非常优美。它是完全面向对象的,容易扩展,允许真正的组件编程。

二、平台支持

Qt不仅支持桌面系统,还支持手机和嵌入式的应用。桌面系统包括Windows、Unix、Linux、Mac,手机系统支持安卓和iOS等。和Java不同的是,它没有运行在额外的一层虚拟机上,而是针对不同的系统提供了相应的套件和编译器。Qt的跨平台支持使得它对不同平台的开发部署更为简单。

三、使用Qt开发的应用

使用Qt开发的应用很多,比较著名的有Linux的桌面环境KDE、WPS、Skype、VirtualBox虚拟机、谷歌地图、VLC播放器等等,其中KDE已经是Linux的主流桌面应用之一。

四、Qt的优点

使用Qt开发有很多优点,比如:

  • 跨平台支持:如果你希望程序运行在多个平台下,同时又降低开发成本,Qt是很好的选择

  • 简单易学:封装好,几行简单的代码就可以开发出简单的程序,不需要对操作系统底层有太多了解

  • 资料丰富:网络上有很多的资料,社区氛围好,可以得到很多帮助

  • 界面漂亮:Qt很容易开发出比较炫酷的效果,而MFC、wxWidgets等就比较麻烦

  • 独立安装:不像Java需要安装虚拟机,C#需要.net,Qt会编译成本地代码,不需要额外库的支持

因为Qt的种种优势,它在市场上的份额越来越高,得到很多公司的青睐。下面列举了猎聘上一些Qt工程师的职位,月薪基本上在2万-3万之间。

五、Qt的发展史与版本

Qt几经辗转,被很多公司收购过,换了很多东家:

  • 1991年由挪威的一家计算机公司Trolltech(奇趣科技)开发

  • 1996年进入商业领域,成为Linux KDE的基础

  • 2008年奇趣科技被芬兰巨头诺基亚收购

  • 2012年诺基亚濒临破产,Qt出售给了芬兰的一家IT公司Digia

Qt的版本:

  • Qt 1 - 3都是由奇趣科技开发的

  • 诺基亚开发了Qt 4版本

  • Digia开发了Qt 5,但是Qt 5对 Qt 4不兼容

另外Qt有商业版和免费版。两者的代码都是一致的,但商业版可以得到售后服务,比如培训和技术支持。免费版需要遵从LGPL协议,简单说,你需要开放所有使用了LGPL协议的代码,所以使用免费版Qt进行商业开发的同学要注意商业纠纷的风险。

六、Qt的下载与安装

(1)下载

Qt有在线安装包和离线安装包。在线安装包的使用体验不是很好,经常会卡顿在99%的进度不能继续,所以推荐大家使用离线安装包。安装包的下载可以使用以下两个网站:

http://www.qtcn.org/bbs/read-htm-tid-1075.html

https://www.qt.io/offline-installerst

比如下载Windows下的Qt 5.14的离线安装包可以选择下面这个链接:

(2)安装

下载好后,前面基本一直点击下一步就可以了:

这一步要注册Qt账户,需要一个邮箱地址,可以按提示操作

指定安装路径

下面需要选择套件,这些套件都包含专属的编译器。

  • MSVC是Desktop Qt MSVC的套件,需要安装Visual Studio相对应的版本

  • MinGW是Desktop Qt MinGW的套件。MinGW是Minimalist GNU for Windows的缩写,是在Windows平台上使用的GNU工具集导入库的集合,这个集合包括了C编译器gcc,C++编译器g++,和调试器gdb等工具。如果不使用Visual Studio,可以选择这个套件

  • UWP是针对Win 10以后UWP程序的套件

  • Android,如果需要开发安卓app,需要勾选这个套件

  • Sources可以下载Qt的源代码

  • Qt的其他组件,比如Qt Charts、Qt Quick 3D等,可以根据需要选择,注意括号里写着(Deprecated)的套件是为了兼容老版本,如果是开发新程序不用选择

  • Developer and Desinger Tools里面Qt Creator是一定要选的,如果使用Qt Creator开发,MinGW也要勾选上

接下来都点击下一步就可以了

接下来开始安装

安装成功

七、总结

Qt有着良好的跨平台支持、界面优美、简单易用、学习资料丰富等优点,和其他的GUI框架相比受到开发者们的广泛欢迎,因此想要从事图形界面开发的同学可以考虑学习Qt。

推荐阅读:

Linux快速搭建C/C++开发环境

一篇文章快速搞懂什么是GitHub

虚拟机安装 Linux 最完整攻略

Vi 和 Vim 的使用

获取知识干货、增加面试经验、了解职场人生

欢迎关注微信公众号

C++最好的图形库是什么?的更多相关文章

  1. C语言图形库简单对比及EGE库的安装小手册

    近期在琢磨C语言的图形库,发现主要有如下几种选择: Turbo C 的graphics库 SDL EasyX EGE 1. 普遍认为Graphics库太老了,而且TurboC本身使用比较麻烦,网上一边 ...

  2. 使用Python中PIL图形库进行截屏

    目的:通过使用Python的一个图形库PIL(Python Image Library)对屏幕进行截图 步骤: 1.下载PIL(路径)并安装 2.新建文件“截屏.py”,右键Edit with IDL ...

  3. 解决使用Skia图形库时遇到的几个问题

    Skia是一个开源的2D图形库,提供通用的API,适用于工作中遇到的各种硬件和软件平台.这是谷歌浏览器Chrome OS,Android的图形引擎,Mozilla Firefox浏览器和Firefox ...

  4. 选择QT作为自己的图形库

    图形库太多,公司里面一直使用自己的图形库,换一家公司,就换个图形库,现在公司没有对我开放图形库代码. 想来想去还是自己要有一套图形库,拿来主义最方便,选来选去感觉还是QT比较方便.同时能学习一下C++ ...

  5. Cytoscape.js – 用于数据分析和可视化的交互图形库

    Cytoscape.js 是一个开源的 JavaScript  图形库,您可以使用 Cytoscape.js 进行数据分析和可视化.Cytoscape.js 可以轻松的继承到你的网站或者 Web 应用 ...

  6. 强大的JavaScript动画图形库mo.js

    最近在学习前端动画方面知识时发现了挺有趣的一个动画的图形库mo.js,页面效果真是酷炫,有兴趣的同学可以研究下:). 酷炫的效果: 以下是官方的demo效果,更多详情请查看 mo.js http:// ...

  7. 在python中使用图形库matplotlib

    matplotlib is a python 2D plotting library which produces publication quality figures in a variety o ...

  8. C++矢量图形库系列(1)——矢量图形库乱谈(转)

    转自:http://blog.sina.com.cn/s/blog_4265e1760100lg03.html 本系列篇章的主要内容是讲解矢量图形库的编译.开发和使用.并不对他们周边的内容做过多的描述 ...

  9. Dev-Cpp配置OpenGL图形库(成功版本:Dev-Cpp 5.7.1 MinGW 4.8.1)

    ★配置前须知:Dev-Cpp自带OpenGL的使用和OpenGL简介 (附Dev-Cpp下载地址:http://sourceforge.net/projects/orwelldevcpp/?sourc ...

  10. Qt之QCustomPlot(图形库)

    简述 QCustomPlot是一个基于Qt C++的图形库,用于绘制和数据可视化 - 制作漂亮的2D图 - 曲线图.趋势图.坐标图.柱状图等,并为实时可视化应用程序提供高性能服务.它没有进一步的依赖关 ...

随机推荐

  1. JAVA I/O基本操作

    JAVA I/O基本操作 JAVA文件操作 JAVA字节流 JAVA字符流 JAVA缓存流 JAVA对象流 JAVA数据流 本文主要借鉴以下博客和网站: how2j.cn 深入理解java中的I/O ...

  2. web自动化 -- Keys(键盘操作)

    Keys没啥好讲的 语法:Keys.CONTRAL    等等类似. 下方就是可以  Keys.   跟的键 那些 \ue000  就是对应的  Windows系统中的键盘码,pywin32 也一样的 ...

  3. Mysql concat() group_concat()用法

    数据库表: 关键字:concat 功能:将多个字符串连接成一个字符串 使用:concat(column1, column2,...)  字段中间可以加连字符 结果:连接参数产生的字符串,如果有任何一个 ...

  4. 初步知道scss 简化css复杂层级

    简介:今天在调试前端样式的时候,el-button组件位置需要调整并且 需要改字体大小 .直接上了一个 font-text:20px; 发现没作用,谷歌调试发现并未作用到组件里的<span> ...

  5. 前端学习(三):body标签(一)

    进击のpython ***** 前端学习--body标签 body中的相关标签,因为是主要展现在页面的内容区域 所以相对来说内容多,杂,要背记的部分很多 当学完这节的内容之后,你可以试着写一片精致的文 ...

  6. C语言中对文件的读写的一些浅显理解

    前述:基于上学期完成的数据结构的课程设计,对于老师的提出要求实现的基础上,自己在使用过程中发现每次打开程序都需要重新输入数据,于是便决定,将文件读写功能加入此次课程设计中,以下是我的一些心得和浅显理解 ...

  7. java基础(一)注释

    注释的三方方式: 1.多行注释 /* 多行注释01 多行注释02 多行注释03 */

  8. ES Reindex用java来实现

    简单的: 核心代码 //发送请求 ReindexRequestBuilder builder=ReindexAction.INSTANCE.newRequestBuilder(client).sour ...

  9. Python time strftime()方法

    描述 Python time strftime() 函数接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定.高佣联盟 www.cgewang.com 语法 strftime( ...

  10. 7.1 NOI模拟赛 计数问题 dp

    还是可以想出来的题目 不过考场上没有想出来 要 引以为戒. 初看觉得有点不可做 10分给到了爆搜. 考虑第一个特殊情况 B排列为1~m. 容易发现A排列中前m个数字 他们之间不能产生交换 且 第k个数 ...