初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)

初次踏上GUI编程之路

 —— 我的Qt学习方法及对Qt认识的不断转变

-> 开始接触GUI与开始接触Qt:

话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像在给Qt做宣传,在主页上占了一栏的广告,只是,这时,我还没怎么刻意去留意这个陌生的字眼。在我大二上学期中下期时,即大概是2011年的12月,由于自己刚刚完成了汇编语言的入门学习,正要制订下一个学习目标,所以,又开始找起了资料,同时,也再次开始为自己的就业问题担心,于是,开始搜集一些招聘单位的信息,这时候,在某些单位的校园招聘信息上看见在“C++研发工程师”这类的岗位上,有着几个优先要求,会脚本编程的优先,熟悉阅读英文文档的优先,会图形编程的优先,此时更加加深了本不是很满足于C++的Win32 Console Application的我对学习图形编程的欲望,想起之前才纠结,想弄个俄罗斯方块,想弄个坦克大战,这些都汲及到了图形编程,之前没接触过MFC,要从MFC基础学起更是需要时间,最后还是放弃了搞那些小程序的念头了。另外,在搜集资料时发现有一些单位上专门提到了这个图形编程是Qt,于是,我开始对它有点好奇,开始搜集资料,了解Qt,并将Qt与MFC, GTK+, wxWidgets这些开发工具进行比较,不过呢,开发工具的比较是最无聊的一项活动了,就像各种编译语言C++, Java, C#这些比较一样无聊,因为各有各特点,谁也不能说清什么问题,每项工具或语言的存在,必有它的原因,这个原因,其中之一体现就是该工具或语言现在还未灭亡,只是,即使知道这个,我还是去比较了,因为,还是想选择一个自己最感兴趣而又不违背自己的学习目的的工具去学习,后来,我也忘了是受了哪些文章的影响了,找过很多文章,具体内容也几乎忘光了,大概都是在说一些跨平台特性,还有画面好不好,还有封装性怎样之类的问题吧,不过后来还是草率地决定了学习Qt了,因为,多天的资料搜集,让自己都觉得反感了,与其花这么多时间在搜集这些无关紧要的东西,还不如快快上手去学习,于是,呃~差不多可以能用狗急跳墙这个成语来形容这状况吧,因为自己有时候把自己逼得比较紧,再不把计划定下来,只会让自己更着急,有些时候犹豫不决还不如当机立断。就这样,我就开始与“Qt”扯上关系了。也在那段时间,把在网上查到的这句话“Qt是一个跨平台的C++图形用户界面应用程序框架”通过信息发到自己的手机上,时不时拿出来看,试着把它背下来,以免别人问起这个“Qt”是什么时,自己连最基本的形容也不会这么囧。

0. 写得有点乱,稍概括一下如何 开始接触GUI与开始接触Qt 就是:

1. -> 曾在CSDN网看过Qt但直接无视其存在;

2. -> 制订计划查阅资料时发现自己有点想学界面编程;

3. -> 不小心发现Qt的存在;

4.-> 将Qt与其它开发工具作对比;

5.-> 草率决定学习Qt;

6.-> 开始Qt学习之路。

-> 逐渐了解Qt:

想学习一个东西,可是最惨的情况莫过于无人指导吧,而且自己身边又没有一个人学习这些东西,所以,还是得靠自己啊~因为个人喜欢对书自学,于是,上网找到了两本书,分别是《零基础学Qt4编程》(吴迪著)和《C++ GUI Programming with Qt 4》(第二版中文版)(Jasmin Blanchette及 Mark Summerfield著),这段时间,正好是我的大二上学期期末考紧张的备考时间,所以,就买了这两本书后没怎么翻过这两书了,一直忍着不让自己这么快看这两书,直到将考试的东西准备充足了才放手给自己学Qt,于是,12月至1 月初,进入了大学应试备考状态,将什么要学习的东西都先放下了,在考试前,时间反而有点松了,该复习的都几乎复习完了,于是,违背计划,偷偷地学习一下,这次,没有一开始就看Qt的这两本书,而是接受了之前找过的网络资料的建议,试试先用了解一下什么是GUI及一些关于GUI编程需要的小基础,于是,先大概看了一下前两集的《孙鑫VC++视频教程》,终于知道了什么是API,什么是句柄,什么是消息,原来这些以前看起来陌生而深奥的东西也不是那么难理解,只是一个很容易理解的概念罢了,特别是带英文的那些,如果将英语翻译过来,发觉原来就是字面意思,然后,从这两集的视频中,还知道了,原来,MFC里面,好多只是调用调用调用啊,除了调用还是调用,从一个巨大的API库里面调用,这也可能是我没有深入去学MFC的体会吧,话说,MFC全称是:微软基础类库,Microsoft Foundation Classes。也不是那么的难记。虽然知道了这么一点的GUI知识,可是,对于Qt,现在还是陌生的,于是,我傻了,在没有开始书本的学习前,我就已经开始找起写Qt的软件,幸好,也没有浪费很多的时间,走很多的弯路,找到了Qt Creater的SDK,不过下载安装上了也对这个界面不是很熟悉,不过也没有去弄它了,等考试结束后,看完了C语言后,开始学习了,首先选择翻开的是《零基础学Qt4 编程》吴迪这本书,因为这本书讲的基础真的好多啊,连背景的那些都讲了,真是适合一个完全的菜鸟,于是,花了数天的时间,慢慢把背景那些也认真看了,因为对这个也挺有兴趣的,好像挺有趣的故事,然后,从这本书的第一章一直到第五章,介绍的都是基础,虽然是好像相关性不大的基础,不过还是觉得挺有收获的,因为,它详细地介绍了Qt几个版本,商业版,GPL,Qt的SDK包含的程序如Qt Library, Qt Designer, Qt Assistant, Qt Demo, qmake等的作用,也正是从这些学习再通过不断地找资料,原来SDK翻译过来就是软件开发工具包这个意思,还有一些以前认为很深奥的名词,IDE,handle,那些意思~简单地说,就是初步了解了学习Qt的背景和开发环境和需用工具了。同时也通过学习这个的过程,感觉自己扩展了自己的视野了,一直觉得自己的知识面很窄。

0. 概括,概括,好像变成了固定格式了 逐渐了解Qt 的过程就是:

1. -> 因无人指导,果断上网找资料买得两本学习用书;

2. -> 未开始翻阅所购书,先开始看两集的《孙鑫VC++视频教程》,了解GUI基础;

3. -> 开始翻开《零基础学Qt4编程》学习一至五章知道了Qt的背景,IDE及Qt_GUI编程基础。

-> 开始学习Qt:

完成了基础的学习后,终于可以期待已久的上机啦,上机编程,我的第一个程序还是最普通的Hello Qt,嘿嘿,第一个程序照着书本敲,把它给敲出来了,无限的兴奋,另外,又因为这时发觉,两本书本的内容好像开始有重叠部分了,于是,将学习方法改变,看见两本书都有Hello Qt,但是两例子却不完全相同,于是,将两本书的同一章节结合学习,以达到互补,强化的作用,这时的章节学习,也做了很详细的学习笔记(在博客上有记录),这时的学习方法主要是,分析代码,从分析中学习语法,从分析中掌握Qt的程序设计思路。然后在编写学习笔记时,展示程序功能,从功能分析程序,总结程序设计思路,摘录(经修改)代码。就以这样的方法,学习了“走近Qt”一章, 从这一部分的学习中,开始熟悉Qt的设计,语法,基本概念。另外,也以同样的方法学习“对话框”的内容,只是,此时,两本书上都有使用到Qt Assistant的内容,喜欢纯编程的我,难免也有点动摇,上群问人,人人都说,用这个,方便,实际工作中一般都用,于是,也不得不把这个也稍学一下了,不过学这个并不难,比写代码要简单,同时也通过这个工具看见了一些组件中的属性还有有哪些组件之类的。就这样,完成了两Part的学习,这时,已经是临近新年了,再加上大作业没完成,而看见下一Part的内容更有难度,于是,想转一下型,先完成数据结构的大作业再继续Qt的学习,果然,和改变了的计划一样,将数据结构的大作业完成了。

0. 还是概括,开始学习Qt:

1. 结合《零基础学Qt4编程》和《C++ GUI Programming with Qt 4》两书。

2. 对于前面两部分的学习(走近Qt、对话框),分析代码,从分析中学习语法级掌握Qt的程序设计思路。

3. 知道Qt有使用纯编程的方式,也有使用鼠标用Qt Designer设计的方式,粗粗地学习了一下Qt Designer。

-> 尝试转换方法学习Qt:

我的寒假作业,也可以当做是自己的项目经验的C++编程小程序(家谱管理系统)完成后,再次再始Qt的学习了,但是发觉好像在两本书中的下一章“主窗口”都没有完整的代码,这就有难度了,平时都是通过分析代码反推思路这种学习方法的,再看见《零基础学Qt4编程》这本书的后面章节好像安排得不昨的,可以说是基本上没有内容了,于是,快速把这书后面的与编程关系不大的理论知识认真地看看,看完了《布局管理》,《Qt核心机制与原理》这些章节后,放下了这本书,这本书就变成了相当于带我进门后就退休的书了。现在就剩下一本书了,很是纠结,好像越看就越痛苦,不知道是知识加深了还是什么原因,另外,如果再继续像之前两个章节的学习方法的话,又好像进度太慢了,而且Qt的学习并不像我学C++那时用《C++ Primer Plus》那样把那书完工了就掌握大部分知识了,不是的,因为了解到Qt有一个大大的library,而也正好在我前两章的学习,第三章的学习查Assistant时才发现,原来,两本书的内容,都可以从Qt Demo和Qt Assistant里面找到啊,只是那个是英文版罢了~ 好吧,开始寻求出路了,看来这学习方法的确要改变了,于是,想过要把Qt Assistant中的内容都试试翻译过来这样学习,想过要寻找几个Qt Demo中的例子制作以驱动自己学习,不过,后来,还是放弃了这想法,因为感觉这样子学起来太不系统了,这就是书本存在着特别的目录的原因吧,于是,再次开始资料搜索,想找出是否有人写过自己一路上怎样学习Qt的经验之类的文章借鉴,找不到,不过倒一个不小心,把一个好的学习资料给找出来了《豆子空间的Qt学习之路》这是一篇篇博文组成的书,看上去简单易懂,好像挺符合个人学习风格,稍浏览电子版的,嗯,决定使用,于是,呜呜,最贵的一次打印了,三毛一张,打了243页的A4纸,再加上一个12元的封面,没有比这学习资料花得更多钱的了,85元啊~ 最近在学习上花的钱是最多的。哈哈,不过也算是物有所值的了,花了四天的时间,将其有时上机有时浏览完了,不过,这本书的学习还没完,之前,刚刚拿到这本书的时候,细看了一部分,将对话框的那些也上机了,发觉它内容不算了,也容易理解,而且上机好玩,之后,看了Event的东西,因为没有实例,看得有点晕,不过也大概明白了Qt的事件机制了,之后,图形一章,看这章时,我发觉,好像,我对这东西兴趣不是很大,而且这样子细看,好像也很快遗忘,于是,快速翻阅了后面的内容,发觉可以转变一下学习方法,先将这些内容每个小节大概看一下,知道这Qt一共是由哪些东西组成,即,去了解整个Qt的部分架构,于是,朝着这个目标,在第四天的时候,也终于将整个这本书浏览了一次了,深有体会,发觉,有些东西与之前的东西有关联,有些东西可以独立,有些东西现阶段可以常常用到,有些东西则在特殊情况才能用到,再翻看《C++ GUI Qt4编程》一书的目录,又好像有点理解为什么它这样编排了,这个知识网络大概就这样了。忘了说了,在上一次找资料《豆子》时,我顺便打印了一个Qt类的继承表下来,因为真是太多类了,打印下来用的时候看可以令自己的思路更加清晰。另外,通过这次的《豆子空间》的Qt学习我知道了,我有一些内容是必须地掌握好一点的,一些则可以用到再查,不过可以做个小模块玩一下熟悉一下。各种的“对话框”是基础中的基础,有些M-V项目视图也用到,所以这个必学,另外,“M-V项目视图”也是很重要的东西,第二学,之后,关于一些容器,文件这些,跟C++的差异不大,可以通过文字总结来巩固,“图形”,“国际化”,“拖放”这些关联不大,可以分别独立拿个小例子来玩一下。我想,接下来的Qt学习方法,已经定好了,先完成刚刚所说的任务,上机,总结笔记,之后,再回看《C++ GUI Qt4编程》这本书。

0. 还是概括,开始学习Qt:

1. 发觉按照以前的分析代码方法有问题,书本没有完整代码,学习方法得转型,先放弃逐章代码分析学习。

2. 开始快速将《零基础学Qt4编程》跟直接编程关系不大的理论知识先学习(布局管理、Qt核心机制与原理)。

3. 找资料,找得《豆子空间的Qt学习之路》,发觉内容较浅显易懂。

4. 稍细看《豆子空间的Qt学习之路》对话框,Event的内容,后来决定先快速浏览完这整本书,了解架构。

5. 知道其实内容很多,难以一下子全部细细掌握,开始注意即学即用的思想。

6. 虽然这样认为,但是,决定,先把最为重要及基础的东西得先掌握,另外,得注重实践,使用Qt Assistant。

-> 学习Qt进入稳定阶段:

有了这个想学以后,开始重新分析现在自己的Qt学习情况:手上有三书籍,《零基础学Qt》带了我进门以后我就叫它退休了。这本书剩下我最值得看的地方是Qt Designer的使用(Qt Desinger是鼠标编界面的方法的软件)。由于现阶段学习喜欢纯手工编程编出界面,而且纯手工对基础的掌握也比较靠谱,当初看上Qt也有一个原因是这个。学习方法过程中,发觉可以将《C++ GUI Qt4 编程》作为后期巩固书籍(其实里面的全部内容都是来自Qt Assistant即MFC里面的Library一样的东西吧)《Qt学习之路》(豆子空间),已将其全部浏览,知道总体大概框架,即Qt里面有些什么东西可以用,常用的一般知道在哪里找了。

分析后对重新制定计划,1.(一天或两天)完成《图形》一分块的编程练习。 2. M-V架构项目视图,估计得三天或五天,这个是很重要的东西,懂了这个就相当于或者可以理解成类似Excel的表格之类的那些对数据的功能操作制作。3. 实际上,现在最缺的就是一点,将所学知识与Qt联系。即,现在Qt的东西只懂得把界面做出来,如何将Qt的界面与像我写的家谱中的那些数据变化那样输入输出呢?只要解决了这个问题,相信我就能对Qt的基础有很大的信心了。也正因以上,有了下面两点。4.做一个像办公类,《成绩管理系统》之类的软件作为实操项目驱动学习。5.做一个游戏类,《贪吃蛇》《俄罗斯》之类的经典小游戏。6. 我想当做完这两个Qt,就将Qt编程方法掌握得差不多了。7. 最后是强化阶段,当然,考虑到时间的问题,这步已经可以忽略不走了,可能等真正找到工作后,稳定后,再将这一步走完,这一步是将《C++ GUI Qt4 编程》细看,细练一次,这本绝对是强大基础的宝典,也是耗时间的东西。(话说,如果刚开始全部用这本书来学习的话,会很吃力,很耗时间啊,并不对完全的菜鸟的目录知识讲解安排得很好)

当我将Qt语法基础细化学习学习到项目视图一知识时,忽然有感,原来,使用Qt,不是要你有多么多的基础,它需要的是你临时解决问题的能力,不管你基础多么的好,你也不可能把这些类库里面的全部东西用熟,即使用熟了,Qt的类库也会不断地更新,只有当想到问题,知道问题的解决需要到哪里找答案时,这才是学会了Qt,自己刚刚回顾了之前做过的笔记,目前为止,自己的学习笔记做了七个部分的内容:

Part 01 走近Qt (2012.01.15)

Part 02 对话框(Qt)[2012.01.20]

Part 03 主窗口(Qt)[2012.02.10]

Part 04 各类对话框(Qt)[2012.02.11]

Part 05 简易画板的实现(Qt)[2012.02.13]

Part 06 项目视图(Widget)(Qt)[2012.02.16]

Part 07 项目视图(基本的M-V架构类)(Qt)[2012.02.17]

Part 08 自定义委托(Qt)[2012.02.18]

在各章学习时,让我学习到了这些:

Part 01 让我知道了Qt的最基本的窗口显示的方法。

Part 02 对话框(Qt)让我知道了布局,信号/槽连接的基本方法。

Part 03 主窗口(Qt)让我知道了主窗口,了解什么是主窗口,如何为主窗口添加最基本的组成部分功能,知道了动作是什么,如何让动作引发信号与槽,了解了工具栏与菜单栏的基本的按钮的添加。

Part 04 各类对话框(Qt)让我知道了在Qt或说是在window里面的对话框可以分出哪些基本种类。

Part 05 简易画板的实现(Qt)让我知道了关于事件的一些应用,使用,知道了一个完整的小程序是哪何实现的,知道了大概关于QPainter类的应用。

Part 06 项目视图(Widget)(Qt)让我知道了一个视图可以分出哪些种类,实际上一般只有三种list,tree,table.知道了添删数据的完成的大概方法。

Part 07 项目视图(基本的M-V架构类)(Qt)让我知道了m-v架构大概是如何实现的,知道了在这三种架构中,各功能大概会有哪些响应。

Part 08 自定义委托(Qt)了解自定义委托的含义,体会编写委托类的方法。

学习自定义的model类时,顿悟了,忽然觉得实际上所创建的类就是要与所继承的类相对应上,所关联的类,关联上,然后,用到哪个类的时候,再去认真地翻阅Qt Assistant,要知道这个类最主要能实现的功能,然后,去了解它的用法,了解它的信号会有哪些,它的槽有哪些,它的公用函数有哪些,当然,不能忘了它的父类,里面也会提到它还能使用父类中的哪些功能。

之后,开始打算做项目驱动学习了,不是为了巩固熟悉哪些类,哪些基础,而是要熟悉这种即学即用的能力,而是要让你提高对这个软件的类库的使用方法。事件有很多,信号/槽也有很多,窗口的种类更是多,一下子想熟悉是不可能的,只有通过不断地查阅,不断地解决问题,这样才是真正的学习目的。

0. 还是概括,学习Qt进入稳定阶段:

1. 分析出哪些内容是需要重点学习的,制定学习内容大纲,对每部分展开学习。

2. 学习方法大多都是直接看《豆子空间的Qt学习之路》,分析代码,尝试脱书重新仿写,做下学习笔记。

-> 开始尝试直接制作小项目驱动Qt的学习:

2012年02月18日,开始尝试寻找项目驱动学习,谁知,再发现了一个问题,你做哪个项目,就决定了你哪个方向,所以,如果不是想精通Qt的话,也没有什么必要去什么类型的项目都做了,只是用到的时候做就好,今天看到关于“加农炮”的小游戏,其实里面只是用了三个类,然后,如果是做其它游戏的时候,这三个类可能就不用用到了,也可能,这里面还汲及到一点的游戏编程的思想,不过,后来想了想,自己还是不大需要,这个思想的话,可能跟办公类的软件也是差不多的,于是,我再次在Qt Demo里面找起了实例,发觉还是做一个文档编辑器更新实惠,我想做了这个,就可以知道各个功能是如何更加清晰地联系在一起了,然后,还打算将这个文档编辑器改一改,这里面是一个窗口的,我想改成可以多窗口的,一个主窗口下包含多个打开的文件,想实现这个功能,然后,又找了一个类似功能的实例,希望这两个实例能有所帮助。然后,又想,要不要做个像“家谱管理系统”还有“学生管理系统”之类的,不过,现在还不想做,想先把这个“文档编辑器”搞定了,然后再去做那些,学生管理系统,看了一下题目,其实用到Qt的知识也不用很多,所以,还是直接先搞定“文档编辑器”如果再有时间的话,再把“学生管理系统”做出来吧。

于是,后来,我选择了做一个“多窗口文档编辑器”,花了十来二十天左右的时间,在2012年03月08日终于将这个小项目完工了(在我blog上有足迹),完工了,也充满了兴奋感。在使用小项目驱动学习的过程,我更加体会到了这种即学即用的重要性,因为,好多时候,你做这个东西时候,就得去掌握这个东西,Qt类库这么庞大,难以一下下就掌了它,如果想多掌握,那就多找几个不同类型的小项目来驱动学习,在做这个小项目时,遇到问题,因为Qt还是比较新啊,没有像MFC那些网上一打就会一大堆的资料,于是,遇到问题,上几个论坛去提问,很是纠结,基本上都是零或者是一的回答,所以,这时候更加知道了,自己能依赖的,只有Assistant和实践试验啦,于是,不断尝试,不断分析,解决问题,把这个小小的程序给做出来啦。

0. 还是概括,开始尝试直接制作小项目驱动Qt的学习:

1. 项目驱动学习,选择自己感兴趣的作为题目,仿照多个例子,学会使用Qt Assistant的资料查阅。

2. 不断地寻找不同类型的,或者自己想要的类型的方面的项目去练习。

-> Qt学习的小小的结束点:

在完成了自己为自己布置的小项目后,我想,这是一个对自己Qt学习,也是GUI编程的小小结束点吧,不过呢,相信这个GUI的学习是还没有结束的,因为,可能,以后还是需要很多地方去用到它的,而这样的学习方法,这样的学习领悟,我是不会忘记的。其实,在做Qt小项目的时候,我很想快点把它结束掉,这是因为,那时候是刚刚开学才开始做这个小项目,然后,刚开学两周,我们学校在搞那个电工实习的课,白天的时间是全没有了的了,只有晚上的那么一点点的时间,另外,自己现在还处于学习阶段,想快点结束掉这个学习,然后进入下一部分的学习中去,是的,我知道,是有点浮躁的想法的,所以,也常常提醒自己得淡定,稳扎稳打才是我的处事风格。好的,努力,接下来,继续在计算机的海洋中飘荡,继续学习更多,更多,扩宽自己的视野,努力将自己所学到的一点一滴应用到生活,应用到这个计算机的专业领域,应用到跨计算机的各个领域中去!加油!Good Good Study,  Day Day Up.

本人小菜,虽然文章不昨的,不过还是怕有人喜欢转载,只是还是希望能保留个人的什么什么权,所以,如果想转载的同志们,对你们有个小小的请求,请写上:文章来自:http://blog.csdn.net/neicole

http://blog.csdn.net/neicole/article/details/7333524

上一篇:matlab.engine在Windows和Linux系统上安装的保姆级教程


下一篇:使用HasMap集合实现:键盘录入一个字符串,要求统计字符串中每个字符串出现的次数