原标题:工控编程,Qt 学习之路

Qt 是一个著名的 C++ 库——或许并不能说这只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI。使用 Qt,在一定程序上你获得的是一个“一站式”的服务:不再需要研究 STL,不再需要 C++ 的string,因为Qt有它自己的 QString 等等。或许这样说很偏激,但 Qt 确实是一个“伟大的 C++ 库”。

我们所使用的 Qt,确切地说也就是它的 GUI 编程部分。C++ 的 GUI 编程同 Java 不同:GUI 并不是 C++ 标准的一部分。所以,如果使用 Java,那么你最好的选择就是 AWT/Swing,或者也可以使SWT/JFace,但是,C++ 的 GUI 编程给了你更多的选择:wxWidget, gtk++ 以及 Qt。这几个库我都有接触,但是接触都不是很多,只能靠一些资料和自己的一点粗浅的认识说一下它们之间的区别(PS: 更详尽的比较在前面的文章中有)。

wxWidget

首先说 wxWidget,这是一个标准的 C++ 库,和 Qt 一样庞大。它的语法看上去和 MFC 类似,有大量的宏。据说,一个 MFC 程序员可以很容易的转换到 wxWidget 上面来。wxWidget 有一个很大的优点,就是它的界面都是原生风格的。这是其他的库所不能做到的。wxWidget 的运行效率很高,据说在Windows 平台上比起微软自家的 MFC 也不相上下。

gtk++

gtk++ 其实是一个 C 库,不过由于 C++ 和 C 之间的关系,这点并没有很大的关系。但是,gtk++ 是一个使用 C 语言很优雅的实现了面向对象程序设计的范例。不过,这也同样带来了一个问题——它的里面带有大量的类型转换的宏来模拟多态,并且它的函数名“又臭又长(不过这点我倒是觉得无所谓,因为它的函数名虽然很长,但是同样很清晰)”,使用下划线分割单词,看上去和 Linux 如出一辙。由于它是 C 语言实现,因此它的运行效率当然不在话下。gtk++ 并不是模拟的原生界面,而有它自己的风格,所以有时候就会和操作系统的界面显得格格不入。

QT

再来看 Qt,和 wxWidget 一样,它也是一个标准的 C++ 库。但是它的语法很类似于 Java 的Swing,十分清晰,而且 SIGNAL/SLOT 机制使得程序看起来很明白——这也是我首先选择 Qt 的一个很重要的方面,因为我是学 Java 出身的 :) 。不过,所谓“成也萧何,败也萧何”,这种机制虽然很清楚,但是它所带来的后果是你需要使用 Qt 的 qmake 对程序进行预处理,才能够再使用 make 或者nmake 进行编译。并且它的界面也不是原生风格的,尽管 Qt 使用 style 机制十分巧妙的模拟了本地界面。另外值得一提的是,Qt 不仅仅运行在桌面环境中,Qt 已经被 Nokia 收购,它现在已经会成为Symbian 系列的主要界面技术—— Qt 是能够运行于嵌入式平台的。

以往人们对 Qt 的授权多有诟病。因为 Qt 的商业版本价格不菲,开源版本使用的是 GPL 协议。但是现在 Qt 的开源协议已经变成 LGPL。这意味着,你可以将 Qt 作为一个库连接到一个闭源软件里面。可以说,现在的 Qt 协议的争议已经不存在了——因为 wxWidgets 或者 gtk+ 同样使用的是类似的协议发布的。

在本系列文章中,我们将使用 Qt4 进行 C++ GUI 的开发。我是参照着《C++ GUI Programming with Qt4》一书进行学习的。其实,我也只是初学 Qt4,在这里将这个学习笔记记下来,希望能够方便更多的朋友学习 Qt4。我是一个 Java 程序员,感觉 Qt4 的一些命名规范以及约束同 Java 有异曲同工之妙,因而从 Java 迁移到 Qt4 似乎困难不大。不过,这也主要是因为 Qt4 良好的设计等等。

责任编辑:

java qt gui_工控编程,Qt 学习之路相关推荐

  1. lubuntu18.04工控屏QT开发

    lubuntu18.04工控屏QT开发--备忘 系统更新 中文语言包及输入法 QT安装 QWT安装 QT程序的打包和运行 Lubuntu开机自启动脚本程序方法 Lubuntu开机跳过输入密码自动登录 ...

  2. Qt在工控行业的一些重点知识点

    1,简介 群里有小伙伴咨询: 拿了一个offer,做QT的,仪器仪表方面的,请问大佬们我怎么准备呢?复习哪些知识呢? 正好我们现在创业公司就在这类行业,借此梳理下用过的一些感觉比较重要的知识点. 2, ...

  3. 工控网络安全产品---学习笔记

    工控网络安全产品 常见的工控安全产品分类 防护类产品 审计类产品 终端类产品 检测类产品 管理类产品 工业互联网态势感知(内网运维管理中心) 物联网态势感知(物联网在线监测系) 工控安全实验室 工控安 ...

  4. java 设置年轻代堆大小,[JVM学习之路]五堆(一)堆的内存结构参数设置分代思想内存分配...

    [JVM学习之路]五堆(一)堆的内存结构参数设置分代思想内存分配 [JVM学习之路]五.堆(一)堆的内存结构.参数设置.分代思想.内存分配策略及TLAB 一.堆的核心概述 堆的特点: 1.一个jvm实 ...

  5. mfc程序转化为qt_工控编程,Qt 学习之路

    Qt 是一个著名的 C++ 库--或许并不能说这只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI.使用 Qt,在一定程序上你获得的是一个"一站式"的服务:不再需要研究 ...

  6. 基于Qt的OpenGL可编程管线学习(9)- X射线

    X射线也就是轮廓线,效果如下图所示 原理:物体表面的法线与人眼睛缩成的角度为90度时,刚好能看到物体的轮廓 Fragment shader代码如下: uniform sampler2D U_MainT ...

  7. 基于Qt的OpenGL可编程管线学习(14)- 正片叠底、逆正片叠底

    1.正片叠底 shader // 正片叠底 uniform sampler2D U_MainTexture; uniform sampler2D U_SubTexture;varying vec2 M ...

  8. mfc编程淘汰了吗_工控编程,学完C++基础后再学什么?

    完?那是什么程度?STL用得熟练吗?算法和数据结构掌握得怎么样呢?会写界面吗?BOOST呢? 像楼上所说的换一种语言,简直是痴人说梦,如果不深入一门语言,夸张一点说,就好比你会用很多编程语言写&quo ...

  9. qt linux地图控件,Qt编写地图综合应用6-百度在线地图

    一.前言 百度在线地图的应用老早就做过,后面经过不断的完善才到今天的这个程序,除了基本的可以载入地图并设置一些相关的属性以外,还增加了各种js函数直接异步加载数据比如动态添加点.矩形.圆形.行政区划等 ...

最新文章

  1. 获清华特奖又上“最强大脑”!这位90后学神去一线抗疫的理由是……
  2. Redis主从复制(读写分离)
  3. smartgwt_SmartGWT入门,提供出色的GWT界面
  4. 在C++中用虚函数的作用是什么? 为什么要用到虚函数?
  5. Linux shell sed awk
  6. 手把手教你学Python:一文看懂字符串基本操作
  7. 基于HAProxy的网站架构
  8. DOM节点的属性及文本操作
  9. 舍选法抽样matlab,舍选抽样法.PPT
  10. 检测浏览器的关闭事件
  11. java修改头像代码_用户修改头像功能
  12. 分享软件测试计划模板
  13. face_recognition 人脸识别
  14. 计算机个性化桌面后总是恢复,Win7切换主题导致个性化桌面图标失效恢复初始的解决方法...
  15. c语言stl用法,C STL快速入门!学习使我快乐
  16. PHP中curl请求无响应
  17. python中的in
  18. 04_NetBean安裝
  19. openresty+kong+konga+postgresql
  20. Spark 数据倾斜介绍_大数据培训

热门文章

  1. 电脑WIFI突然消失解决方法
  2. 7代cpu能装虚拟xp系统吗_Intel 10代PC/笔记本安装Win7踩坑记 amp; 驱动分享
  3. Spring Cloud Alibaba入门实践(五)-远程调用Feign
  4. vmware虚拟机更改MAC地址方法
  5. Error. An error occurred while processing your request.
  6. ESP8266 WIFI模块调试及在QT Windows下的通讯
  7. 第六章——数值积分与数值微分
  8. 800名科学家联名反对统计学意义,放弃P值“决定论”!
  9. 知网的caj怎么保存成pdf
  10. 如何实现上传多个图片并依次展示_如何在一张ppt中插入多张图片并能依次播放...