The Fourth Dimension Space

枯叶北风寒,忽然年以残,念往昔,语默心酸。二十光阴无一物,韶光贱,寐难安; 不畏形影单,道途阻且慢,哪曲折,如渡飞湍。斩浪劈波酬壮志,同把酒,共言欢! -如梦令

Qt 深入浅出

Qt 深入浅出

经常有人问哪里有学习Qt的资料,Qt的教程,怎么才能入门等等,或者抱怨说中文的信息太少。其实网上有很多关于Qt的学习资料,今天在这里总结一下,希望各位想学习Qt的同学,各取所需,早日从入门到精通!

Part 1: 新手上路

Qt 官方学习教程

Qt 官方学习教程包含了3部分,包括如何学习Qt,如何逐步创建一个地址簿应用以及如何编写Qt Widget。教程由浅入深,Qt初学者必读
如何学习 Qt
我们假定您已了解 C++, 并将用于 Qt 开发。有关将 Qt 与其他编程语言一起使用的更多信息,请参见 Qt 网站。。。。。
地址簿教程
本教程介绍了使用 Qt 跨平台框架的 GUI 编程。在学习过程中,我们将了解部分 Qt 基本技术,如Widget 和布局管理器,容器类,信号和槽,输入和输出设备等。。
Widgets 教程
Widget 是使用 Qt 编写的图形用户界面 (GUI) 应用程序的基本生成块。每个 GUI 组件,如按钮、标签或文本编辑器,都是一个 widget ,并可以放置在现有的用户界面中或作为单独的窗口显示。每种类型的组件都是由 QWidget 的特殊子类提供的,而 QWidget 自身又是 QObject 的子类。

Qt 学习之路:

来自于FinderCheng的Qt 学习之路。简介:在本系列文章中,FinderCheng使用Qt4进行C++ GUI的开发。我是参照着《C++ GUI Programming with Qt4》一书进行学习的。其实,我也只是初学Qt4,在这里将这个学习笔记记下来,希望能够方便更多的朋友学习Qt4。我是一个Java程序员,感觉 Qt4的一些命名规范以及约束同Java有异曲同工之妙,因而从Java迁移到Qt4似乎困难不大。不过,这也主要是因为Qt4良好的设计等等。
Qt学习之路(1):前言
Qt是一个著名的C++库——或许并不能说这只是一个GUI库,因为Qt十分庞大,并不仅仅是GUI。使用Qt,在一定程序上你获得的是一个“一站式”的服务:不再需要研究STL,不再需要C++的 ,因为Qt有它自己的QString等等。或许这样说很偏激,但Qt确实是一个 “伟大的C++库”。
Qt学习之路(2):Hello, world!
任何编程技术的学习第一课基本上都会是Hello, world!,我也不想故意打破这个惯例——照理说,应该首先回顾一下Qt的历史,不过即使不说这些也并无大碍。
Qt学习之路(3):Hello, world!(续)
下面来逐行解释一下前面的那个Hello, world!程序,尽管很简单,但却可以对Qt程序的结构有一个清楚的认识。现在再把代码贴过来:
Qt学习之路(4):初探信号槽
所谓信号槽,简单来说,就像是插销一样:一个插头和一个插座。怎么说呢?当某种事件发生之后,比如,点击了一下鼠标,或者按了某个按键,这时,这个组件就 会发出一个信号。就像是广播一样,如果有了事件,它就漫天发声。这时,如果有一个槽,正好对应上这个信号,那么,这个槽的函数就会执行,也就是回调。就像 广播发出了,如果你感兴趣,那么你就会对这个广播有反应。干巴巴的解释很无力,还是看代码:
Qt学习之路(5):组件布局
顾名思义,绝对定位就是使用最原始的定位方法,给出这个组件的坐标和长宽值。这样,Qt就知道该把组件放在哪里,以及怎么设置组件的大小了。但是这样做的 一个问题是,如果用户改变了窗口大小,比如点击了最大化或者拖动窗口边缘,这时,你就要自己编写相应的函数来响应这些变化,以避免那些组件还只是静静地呆 在一个角落。或者,更简单的方法是直接禁止用户改变大小。
Qt学习之路(6): API文档的使用
今天来说一下有关Qt API文档的使用。因为Qt有一个商业版本,因此它的文档十分健全,而且编写良好。对于开发者来说,查看文档时开发必修课之一——没有人能够记住那么多API的使用!
Qt学习之路(7): 创建一个对话框(上)
首先说明一点,在C++ GUI Programming with Qt4, 2nd中,这一章连同以后的若干章一起,完成了一个比较完整的程序——一个模仿Excel的电子表格。不过这个程序挺大的,而且书中也没有给出完整的源代 码,只是分段分段的——我不喜欢这个样子,我想要看到我写出来的是什么东西,这是最主要的,而不是慢慢的过上几章的内容才能看到自己的作品。
Qt学习之路(8): 创建一个对话框(下)
Qt是分模块的,记得我们建工程的时候就会问你,使用哪些模块?QtCore?QtGui?QtXml?等等。这里,我们引入QtGui,它包括了 QtCore和QtGui模块。不过,这并不是最好的做法,因为QtGui文件很大,包括了GUI的所有组件,但是很多组件我们根本是用不到的——就像 Swing的import,
Qt学习之路(9):深入了解信号槽
函数和 普通的C++成员函数没有很大的区别。它们也可以使virtual的;可以被重写;可以使public、protected或者private 的;可以由其它的C++函数调用;参数可以是任何类型的。如果要说区别,就是,槽函数可以和一个信号相连接,当这个信号发生时,它可以被自动调用。
Qt学习之路(10): Meta-Object系统
前面说过,Qt使用的是自己的预编译器,它提供了对C++的一种扩展。利用Qt的信号槽机制,就可以把彼此独立的模块相互连接起来,不需要实现知道模块的任何细节。为了达到这个目的,Qt提出了一个Meta-Object系统。它提供了两个关键的作用:信号槽和内省。
Qt学习之路(11): MainWindow
尽管Qt提供了很方便的快速开发工具QtDesigner用来拖放界面元素,但是现在我并不打算去介绍这个工具,原因之一在于我们的学习大体上是依靠手工编写代码,过早的接触设计工具并不能让我们对Qt的概念突飞猛进
Qt学习之路(12): 菜单和工具条
在前面的QMainWindow的基础之上,我们开始着手建造我们的应用程序。虽然现在已经有一个框架,但是,确切地说我们还一行代码没有写呢!下面的工作就不那么简单了!在这一节里面,我们要为我们的框架添加菜单和工具条。
Qt学习之路(13): 菜单和工具条(续)
前面一节我们已经把QAction添加到菜单和工具条上面。现在我们要添加一些图片美化一下,然后把信号槽加上,这样,我们的action就可以相应啦!
Qt学习之路(14): 状态栏
今天的内容主要还是继续完善前面的那个程序。我们要为我们的程序加上一个状态栏。
Qt学习之路(15): Qt标准对话框之QFileDialog
下面还是按照我们的进度,从Qt的标准对话框开始说起。所谓标准对话框,其实就是Qt内置的一些对话框,比如文件选择、颜色选择等等。今天首先介绍一下QFileDialog。
Qt学习之路(16): Qt标准对话框之QColorDialog
继续来说Qt的标准对话框,这次说说QColorDialog。这是Qt提供的颜色选择对话框。
Qt学习之路(tip): parent参数
程序写的多了,你会发现几乎所有的Qt类的构造函数都会有一个parent参数。这个参数通常是QObject* 或者是 QWidget* 类型的。
Qt学习之路(17): Qt标准对话框之QMessageBox
这次来说一下QMessageBox以及类似的几种对话框。其实,我们已经用过QMessageBox了,就在之前的几个程序中。
Qt学习之路(18): Qt标准对话框之QInputDialog
这是Qt标准对话框的最后一部分。正如同其名字显示的一样,QInputDialog用于接收用户的输入。

Part 2: 进阶学习

Qt4 学习笔记

Qt4 学习笔记(繁体中文) 简体中文(Google 翻译)
来自台湾的caterpillar,Qt4 学习笔记由浅入深,分门别类的介绍了Qt4 中的许多特性,如事件處理,常用圖型元件,常用 API,檔案處理,拖放(Drag & Drop)與剪貼,多執行緒(Multithreading)很多内容,是进一步学习Qt的极好教程

Qt 开发实例

Code Project:创建一个媒体播放器
这里我们将会构建所能想到的最简单和最直观的音乐播放器,给用户提供另一个选择。 从苹果的新款iPod Shuffle吸取一些灵感,只提供最基本的控制功能。
Code Project:创建一个FFMPEG前端
如果说有一种工具非常需要GUI,那就是FFMPEG。FFMPEG是一个十分优秀的命令行应用程序,它可以将视频和电影文件从一种格式转换为另一种格式。
Code Project:创建一个Qt RSS阅读器
这个应用程序就是一个RSS阅读器,它允许用户添加自己的种子,列出该种子上的内容,然后让用户在主应用程序自带的一个浏览器窗口中阅读这些内容。

Qt Graphics View详解

来自清源游民的Qt笔记,详解介绍了Qt Graphics View中各个对象的概念和使用方法。对于Graphics View的学习大有裨益。
Qt 的 Graphics View 框架(一)
Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放。
Qt 的 Graphics View 框架(二)
Graphics View基于笛卡尔坐标系。item在场景中的位置与几何形状通过x,y坐标表示。当使用未经变形的视图来观察场景时,场景中的一个单位等于屏幕上的一个像素。
Qt 的 Graphics View 框架(三)
QGraphicsView通过QGraphicsView::setMatrix()支持同QPainter一样的仿射变换,通过对一个视图应用变换,你可以很容易地支持普通的导航特性如缩放与旋转。

关于Qt编程的书籍

接下来当你学习了上面的相关内容后,就可以开始阅读Qt编程的书籍进行系统的学习了。当然,书也不一定要从头到尾阅读一遍,用时拿出来学习和参考也很不错
C++ GUI Programming with Qt 4 (2nd Edition) (英文版)
C++ GUI Qt4 编程中文版China-pub购买地址

 

本书详细讲述了用最新的Qt版本进行图形用户界面应用程序开发的各个方面。前5章主要涉及Qt基础知识,后两个部分主要讲解Qt的中高级编程,包括布局管 理、事件处理、二维/三维图形、拖放、项视图类、容器类、输入/输出、数据库、多线程、网络、XML、国际化、嵌入式编程等内容。对于本书讲授的大量 Qt4编程原理和实践,都可以轻易将其应用于Qt4.4、Qt4.5以及后续版本的Qt程序开发过程中。

C++ GUI Programming with Qt 4 (英文第一版)
The Book of Qt 4 - The Art of Building Qt Applications

Part3:深入理解

Inside Qt 系列

QKevin所著,通过剖析Qt源代码,深入浅出的解释了Qt中的许多机制,了解Qt内部是如何 work 的。着实为想深入了解Qt的开发者提供了很好的学习机会。如果你已经学习了上面的内容并且熟练掌握Qt编程,那么大力推荐这一系列文章!
Inside Qt Series: 序
写了这么多年的程序,除了留下很多 code (其中有很多是garbage)之外,再没有其它东西,或许我该写点儿什么了,写一些关于我的工作的东西,自己所了解的技术,也把自己在工作过程中新学习的一些东西放在这儿,就算是为了以后做一个参考。
Inside Qt Series (一):Let’s go, Starting From the QObject
QObject 这个 class 是 QT 对象模型的核心,绝大部分的 QT 类都是从这个类继承而来。这个模型的中心特征就是一个叫做信号和槽(signal and slot)的机制来实现对象间的通讯,
Inside Qt Series (二):对象数据存储(A)
我们知道,在C++中,几乎每一个类(class)中都需要有一些类的成员变量(class member variable),在通常情况下的做法如下:
Inside Qt Series (三):对象数据存储(B)
在 QT 4.4 中,类成员变量定义方法的出发点没有变化,只是在具体的实现手段上发生了非常大的变化,下面具体来看。
Inside Qt Series (四):对象数据存储(C)
接上节,让我们来看看这个 QObjectPrivate 和 QObject 是如何关联在一起的。
Inside Qt Series (五):元对象系统(Meta-Object System)
从本节开始,我们讲解 QT Meta-Object System 的功能,以及实现。在使用 Qt 开发的过程中,大量的使用了 signal 和 slot. 比如,响应一个 button 的 click 事件,我们一般都写如下的代码:
Inside Qt Series (六):元对象编译器 – Meta Object Compiler (moc)
元对象编译器用来处理QT 的C++扩展,moc 分析C++源文件,如果它发现在一个头文件(header file)中包含Q_OBJECT 宏定义,然后动态的生成另外一个C++源文件
Inside Qt Series (七):Signal & Slot
信号和 槽是用来在对象间通讯的方法,当一个特定事件发生的时候,signal会被 emit 出来,slot 调用是用来响应相应的 signal 的。
Inside Qt Series (八):Meta Object Class overview
前面我们介绍了 Meta Object 的基本功能,和它支持的最重要的特性之一:Signal & Slot的基本功能。现在让我们来进入 Meta Object 的内部,看看它是如何支持这些能力的。
Inside Qt Series (九):QMetaObject class data members
我们来看一下QMetaObject的定义,我们先看一下QMetaObject对象中包含的成员数据。
Inside Qt Series (十):connect,幕后的故事
我们都知道,把一个signal和slot连接起来,需要使用QObject类的connect方法,它的作用就是把一个object的signal和另外一个object的slot连接起来,以达到对象间通讯的目的。
Inside Qt Series (十一):emit,幕后的故事
当我们写下一下emit signal代码的时候,与这个signal相连接的slot就会被调用,那么这个调用是如何发生的呢?让我们来逐一解开其中的谜团。
Inside Qt Series (十二):Qt对象之间的父子关系
很多C/C++初学者常犯的一个错误就是,使用malloc、new分配了一块内存却忘记释放,导致内存泄漏。Qt的对象模型提供了一种Qt对象之间的父 子关系..
Inside Qt Series (十三):Qt/e体系结构概述
首先,让我们来看看Qt/e的系统结构介绍:Qt for destop Linux 和 Qt for Embedded Linux 最大的区别就在于他们所依赖的底层显示基础的不同,这也就导致了他们在体系结构上的差异。
Inside Qt Series (十四):Qt/e输入法程序设计指南
本输入法设计指南针对Qt for Embedded Linux 4.5.1,并且以中文输入法为例做说明,并且本文只是侧重于说明Qt/Embedded对输入法的支持接口,
Inside Qt Series (十五):Qt/e 输入法,How it works?
前面我们介绍了Qte输入法的基本设计思路,以及一个最简单的例子,那么,Qte的输入法是如何工作的呢?本节我们就来看一下Qte的源代码,一起来解开这个谜团。

Part 4:移动平台开发

Symbian S60

Forum Nokia Qt for Mobile Developers training
09年10月21至23号,某人参加了诺基亚在北航举办的Qt开发培训。培训师是来自于芬兰的Niemi Petri,英语比好多芬兰人要好,课程讲得深入浅出,很好理解。课程内容涉及Qt的基本知识,以及Qt在S60和Maemo上的开发。下面是培训的PPT和作业以及演示代码。
第一天培训ppt:Qt for mobile – Day 1
第二天培训ppt:Qt for mobile – Day 2
第三天培训ppt:Qt for mobile – Day 3
第一天练习:Exercise – Day 1
第二天演示:Demo – Day 2

Maemo

转自:http://www.qteverywhere.com/learnqt

posted on 2010-12-21 23:11 abilitytao 阅读(2134) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理