找回密码
 立即注册
Qt开源社区 门户 查看内容

Qt要不要学,应该怎么学,都需要学习哪些内容?听过来人怎么说!

2019-3-1 18:14| 发布者: admin| 查看: 2363| 评论: 0

摘要: 来源于微信公众号:yafeilinux和他的朋友们 导语一转眼,Qt编程快速入门视频课程已经上线两年,两 ...
来源于微信公众号:yafeilinux和他的朋友们

导语


一转眼,Qt编程快速入门视频课程已经上线两年,两年间该视频课程总共开设6期,帮助成百上千的初学者走进Qt的大门。直到现在,依然有同学苦恼到底该学习文字教程还是视频教程,其实这个是因人而异的。在这里我们不讨论过多的学习方法,只是想发布几个第6期同学的学后体会,希望可以帮助还在迷茫的同学找到一点方向。



陈同学对Qt整个内容的学习体会


通过这 13 个课时的学习,让我初步认识并概括性的使用 Qt 进行程序的开发,对于 Qt中 C++模块有了一个整体上的了解和认识。

主窗口与窗口部件让我认识了常用的一些部件,分清了窗口和子部件的区别,同时明白了如何使用一般性的窗口(主窗口,对话框)来进行部件的填充和布局。

纯代码编写部分让我明白了 Qt 应用程序构建和编译的过程,明白了 QtCreator 是如何替代我们完成了哪些工作的,明白了 qmake -project, qmake, mingw32-make, uic -o 等编译的流程,从而明白了文件之间的关系,如何将 ui 应用到类上,什么是 moc 文件(元对象编译器对于继承自 QObject,并包含有 Q_OBJECT 宏的类扩展形成的一个源文件,和编写的源文件一起参与链接和编译)。

Qt 的核心内容主要是关于 Qt 的对象特性和支持这些特性的一些机制,比如事件机制, 信号和槽机制,属性系统等等,其中有部分的机制需要元对象系统的支持,元对象系统主要是要求所支持的类,第一个继承自 QObject 类,同时包括 Q_OBJECT 宏,并采用元对象编译器将Qt 扩展的特性编成标准 C++编译器所能够理解的方式。

国际化与界面美化就更加强大了,国际化表明了 QObject::tr() 和 QApplication::translate() 以及一些相关的宏(对于多个函数中使用的字符串的标记宏(分为有上下文参数和没有上下文参数的(QT_TR_NOOP,  QT_TRANSLATE_NOOP)),对于不是继承自 QObject 类的类中声明宏(QT_DECLARE_TR_FUNCTIONS)),以上所有的都是为了在执行 lupdate 时将所有需要翻译的文本提取出来,形成 ts 文件,并返回 qApp 中加载的 qm 文件中对应的翻译文本。界面美化就是采用选择器和声明的结合使用(和 css  类似),从而根据设置属性来美化界面,为了方便使用,还可以形成 qss 文件,通过setStyleSheet()将其导入应用程序中。

2D 绘图主要就是讲解了 QPainter 这个类,所有的绘制都是集于这个类的函数,从而在相应的  QPainterDevice  上进行绘制而成的,它们之间通过  QPainterEngine  进行关联,并且 提到了 QPainter 的绘制通常都是在 paintEvent()中进行绘制,也讲解了逻辑坐标和物理坐标之间的关系,主要是三个函数  transform() window() viewport()完成映射,并解释了如何通过变换坐标轴来使得图形发生变化,以及如何通过设置视口和窗口来使代码独立于设备。同时又讲解了如何通过双缓冲绘图的方式完成涂鸦板程序,这个就需要借助事件的传递和自定义实现事件默认处理函数来完成了,同时需要自定义两个缓冲区,一个临时缓冲区(防止闪烁),一个最终缓冲区(方便记录最终状态和中间绘制时更新临时缓冲区)。

图形视图框架主要讲解了三个类的特性 QGraphicsScene, QGraphicsView, QGraphicsItem,场景负责管理图形项,并传递事件给图形项,同时提供渲染打印功能;视图主要负责显示场景中的图形项,并传递转换事件给场景,可以进行设备物理坐标(视口)的坐标变换;图形项可以使用标准形状的图形项,也可以通过继承并重新实现  boundingRect()和  paint()自定义 图形项,最后还讲到了一些关于图形视图框架的特殊应用,比如检测碰撞函数及相关检测模式,视图设置视口部件来使用 opengl 渲染等等。

3D 绘图主要讲解了如何继承自 QOpenGLWidget 来完成对于 opengl 图形的显示,主要涉及了三个函数:paintgl() resizegl() initialgl(),并可以通过多继承(QOpenGLFunctions),来使用 opengl2.0 中所有 api 的相关 Qt 接口函数;在 initialgl() 中创建并设置opengl 环境和资源,初始化所有的 opengl 函数,通过  QOpenGLShader  来创建和编译着色器程序(顶点着色器和片段着色器),通过  QOpenGLShaderProgram  来添加和链接着色器,并将最终的着色器程序绑定到 opengl 当前上下文环境中,在 paintgl 中进行 3d 图形的数据关联,颜色纹理数据的输入,绘制,其中还提到了如何定位着色器程序中变量在参数列表中的位置,如何使用矩阵来设置图形变换,如何使用缓冲区来提高性能等等。

网络部件主要通过不同层次的类接口来完成相应的程序,熟悉底层的 socket 和顶层的通用协议的不同抽象层次的类使用。模型视图编程和数据库编程都是可以在一起说的,只是数据的存储位置不同,多媒体播放主要是讲解了 QMediaPlayer 的作用以及相应的播放部件, 后面的几个章节由于时间的缘故,还需要学习一遍才能大概知晓其内容。

总结一下,经过这段时间学习,初步认识了 Qt,明白了如何进行 Qt 文档的查阅和使用,明白了如何搞清楚类的含义以及类与类之间的配合使用,功能模块的划分等知识,相信在今后的学习中一定可以继续的深入下去,将 Qt 用好,开发出好的应用程序。



李同学从小有基础到系统学习


在我学习本期课程之前,我自己已经接触过Qt并且也用Qt做了一个串口通讯的小程序.但是之前做的时候就像是摸着石头过河,很多东西只了解得不是很透彻,做出来的程序也经常会出现一些小问题.

一开始看到课程安排的时候,我觉得就是我以前用的那些知识,有一种听和不听都差别不大的感觉.但是实际下来通过这一期课程的学习,特别是前面的1、2节课,里面讲解了很多我那个程序里面所用到的知识,而且都讲到了当时自学时候不清楚或者不了解的点.真的是使我受益匪浅.

在学习的过程当中,由于前期工作不是很繁忙,作业课程都做得比较认真,但是后面由于工作的原因,一个星期可能就只能抽出半天来学习.但是后面肯定会不断的去回顾这13期的内容,认真学习Qt的学习方法,另外在多写一些程序,让自己更加熟练.

最后要谢谢亚飞老师的课程,谢谢!



童同学因工作需要而学习


学习Qt是因为公司有一个新的研发项目,在linux平台上运行Qt程序。之前对Qt并不太了解,很多概念也是傻傻分不清楚。不清楚该看什么教程也不知道从哪里入手,在上网查找学习资料的过程中发现有一本书的名字多次出现,那就是《Qt学习之路》。从而知道了Qt开源社区也知道了亚飞老师。之后就随着亚飞老师一步步走上了学习Qt的道路上来。随着智能手机、智能平板以及各种嵌入式设备的兴起,Qt技术已经多来越多的运用在各种嵌入式设备中来。所以学习Qt是软件研发工作人员的一个重要的技术方向。

第一节课就学习了搭建Qt环境以及如何使用Qt creator,编写了第一个Qt程序hello word。之后又讲解了主窗口与窗口部件的使用方法,着重讲解了QWidget类。在第三课中讲解了Qt中信号和槽的概念以及使用方法,还学习了事件系统包括事件处理、鼠标滚轮事件等。

在国际化与界面美化的课程中学到了可以使我们做的Qt界面更加美观漂亮。2D、3D绘图与图形视图框架有讲解了界面图画的使用。对于通讯方面学习了TCP与UDP的网络通讯,以及使用TCP与UDP的网络通讯技术设计编写的Qt程序。还讲解了对于数据的处理及数据库的使用。最后讲解了多媒体的知识以及综合使用之前学习的知识制作了一个多媒体播放器。将所学的知识加以灵活运用,更加深了对Qt的认识与理解。

通过对本期Qt课程的学习深刻感受到Qt的功能强大,也体会到Qt的功能强大与Qt知识的庞大。以后要更加努力的学习,多加练习Qt程序多看一些好的Qt程序从中学习知识技巧与编程思想。

在此感谢亚飞老师的授课,与耐心的指导。



YG同学从零基础到真正上手


三个多月以来,沉浸在qt学习的气氛中,从“一见钟情”但了解有限,到从模仿老师的程序开始,慢慢开始熟悉,慢慢有所领悟,再到能有一点点自我发挥,这个过程非常愉快也非常难忘。

特别要说的是,这差不多是我接触网课以来,印象最好的一门课程了。霍老师的课,结构清晰易懂,表述准确简练,辅助以精选的例题和作业,学习效率很高,学习效果好。

本次课程的特点,正如本课的名称所示,着重在“快速”和“入门”两个方面。以我自己的感受说,我大概是qt零基础,c++中等了解吧,之前自己摸索过一阵子qt,但是感觉上手并不容易。主要是因为自己学习时常常是一块一块零散的内容,缺乏对知识点结构性的把握;另外针对局部内容,自学中也不容易把握学习内容深浅程度。这种顺着知识目录搬砖式的学习,存在两个问题,一个是效率不高,另一个是入门不易。而我在自学qt中遇到的两个问题,正是本课程设计有针对性主要特点,能帮助我更有效更好地掌握qt这个工具。另外,参与网课学习,课外仍然需要花时间消化课上知识,巩固对知识点的理解和掌握,补充自己的不足,认真完成作业,这样才能获得更好的学习效果。

以上是我参与本次课程学习的两点感受。

感谢霍老师的辛勤授课并网站同事的付出

结语


这几名同学的总结写的不一定是最好的,但都是比较有针对性的,希望他们的真实体会对同样情况的你有所帮助!




----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:yafeilinux和他的朋友们,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

1人点赞路过

鸡蛋

刚表态过的朋友 (1 人)


公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了