QT中⽂教程-----QT教程指南
转载⾃
⽹上有很多关于Qt的学习资料,今天在这⾥总结⼀下,希望各位想学习Qt的同学,各取所需,早⽇从⼊门到精通!
Part 1: 新⼿上路
Qt 官⽅学习教程
Qt 官⽅学习教程包含了3部分,包括如何学习Qt,如何逐步创建⼀个地址簿应⽤以及如何编写Qt Widget。教程由浅⼊深,Qt初学者必读
我们假定您已了解 C++, 并将⽤于 Qt 开发。有关将 Qt 与其他编程语⾔⼀起使⽤的更多信息,请参见 。。。。。
本教程介绍了使⽤ Qt 跨平台框架的 GUI 编程。在学习过程中,我们将了解部分 Qt 基本技术,如Widget 和布局管理器,容器类,信号和槽,输⼊和输出设备等。。
Widget 是使⽤ Qt 编写的图形⽤户界⾯ (GUI) 应⽤程序的基本⽣成块。每个 GUI 组件,如按钮、标签或⽂本编辑器,都是⼀个 widget ,并可以放置在现有的⽤户界⾯中或作为单独的窗⼝显⽰。每种类型的组件都是由 的特殊⼦类提供的,⽽ QWidget ⾃⾝⼜是 的⼦类。
Qt 学习之路:
来⾃于FinderCheng的Qt 学习之路。简介:在本系列⽂章中,FinderCheng使⽤Qt4进⾏C++ GUI的开发。我是参照着《C++ GUI Programming with Qt4》⼀书进⾏学习的。其实,我也只是初学Qt4,在这⾥将这个学习笔记记下来,希望能够⽅便更多的朋友学习
Qt4。我是⼀个Java程序员,感觉 Qt4的⼀些命名规范以及约束同Java有异曲同⼯之妙,因⽽从Java迁移到Qt4似乎困难不⼤。不过,这也主要是因为Qt4良好的设计等等。
Qt是⼀个著名的C++库——或许并不能说这只是⼀个GUI库,因为Qt⼗分庞⼤,并不仅仅是GUI。使⽤Qt,在⼀定程序上你获得的是⼀
个“⼀站式”的服务:不再需要研究STL,不再需要C++的 ,因为Qt有它⾃⼰的QString等等。或许这样说很偏激,但Qt确实是⼀个 “伟⼤的C++库”。
任何编程技术的学习第⼀课基本上都会是Hello, world!,我也不想故意打破这个惯例——照理说,应该
⾸先回顾⼀下Qt的历史,不过即使不说这些也并⽆⼤碍。
下⾯来逐⾏解释⼀下前⾯的那个Hello, world!程序,尽管很简单,但却可以对Qt程序的结构有⼀个清楚的认识。现在再把代码贴过来:
所谓信号槽,简单来说,就像是插销⼀样:⼀个插头和⼀个插座。怎么说呢?当某种事件发⽣之后,⽐如,点击了⼀下⿏标,或者按了某个按键,这时,这个组件就 会发出⼀个信号。就像是⼴播⼀样,如果有了事件,它就漫天发声。这时,如果有⼀个槽,正好对应上这个信号,那么,这个槽的函数就会执⾏,也就是回调。就像 ⼴播发出了,如果你感兴趣,那么你就会对这个⼴播有反应。⼲巴巴的解释很⽆⼒,还是看代码:
顾名思义,绝对定位就是使⽤最原始的定位⽅法,给出这个组件的坐标和长宽值。这样,Qt就知道该把组件放在哪⾥,以及怎么设置组件的⼤⼩了。但是这样做的 ⼀个问题是,如果⽤户改变了窗⼝⼤⼩,⽐如点击了最⼤化或者拖动窗⼝边缘,这时,你就要⾃⼰编写相应的函数来响应这些变化,以避免那些组件还只是静静地呆 在⼀个⾓落。或者,更简单的⽅法是直接禁⽌⽤户改变⼤⼩。
今天来说⼀下有关Qt API⽂档的使⽤。因为Qt有⼀个商业版本,因此它的⽂档⼗分健全,⽽且编写良好。对于开发者来说,查看⽂档时开发必修课之⼀——没有⼈能够记住那么多API的使⽤!
⾸先说明⼀点,在C++ GUI Programming with Qt4, 2nd中,这⼀章连同以后的若⼲章⼀起,完成了⼀个⽐较完整的程序——⼀个模仿Excel的电⼦表格。不过这个程序挺⼤的,⽽且书中也没有给出完整的源代 码,只是分段分段的——我不喜欢这个样⼦,我想要看到我写出来的是什么东西,这是最主要的,⽽不是慢慢的过上⼏章的内容才能看到⾃⼰的作品。
Qt是分模块的,记得我们建⼯程的时候就会问你,使⽤哪些模块?QtCore?QtGui?QtXml?等等。这⾥,我们引⼊QtGui,它包括了QtCore和QtGui模块。不过,这并不是最好的做法,因为QtGui⽂件很⼤,包括了GUI的所有组件,但是很多组件我们根本是⽤不到的——就像 Swing的import,
自学java从哪里开始槽函数和 普通的C++成员函数没有很⼤的区别。它们也可以使virtual的;可以被重写;可以使public、protected或者private 的;可以由其它的C++函数调⽤;参数可以是任何类型的。如果要说区别,就是,槽函数可以和⼀个信号相连接,当这个信号发⽣时,它可以被⾃动调⽤。
前⾯说过,Qt使⽤的是⾃⼰的预编译器,它提供了对C++的⼀种扩展。利⽤Qt的信号槽机制,就可以把彼此独⽴的模块相互连接起来,不需要实现知道模块的任何细节。为了达到这个⽬的,Qt提出了⼀个Meta-Object系统。它提供了两个关键的作⽤:信号槽和内省。
Part 2: 进阶学习
Qt4 学习笔记
来⾃台湾的caterpillar,Qt4 学习笔记由浅⼊深,分门别类的介绍了Qt4 中的许多特性,如事件處理,常⽤圖型元件,常⽤ API,檔案處理,拖放(Drag & Drop)與剪貼,多執⾏緒(Multithreading)很多内容,是进⼀步学习Qt的极好教程
关于Qt编程的书籍
接下来当你学习了上⾯的相关内容后,就可以开始阅读Qt编程的书籍进⾏系统的学习了。当然,书也不⼀定要从头到尾阅读⼀遍,⽤时拿出来学习和参考也很不错
本书详细讲述了⽤最新的Qt版本进⾏图形⽤户界⾯应⽤程序开发的各个⽅⾯。前5章主要涉及Qt基础知识,后两个部分主要讲解Qt的中⾼级编程,包括布局管 理、事件处理、⼆维/三维图形、拖放、项视图类、容器类、输⼊/输出、数据库、多线程、⽹络、XML、国际化、嵌⼊式编程等内容。对于本书讲授的⼤量 Qt4编程原理和实践,都可以轻易将其应⽤于Qt4.4、Qt4.5以及后续版本的Qt程序开发过程中。
Part3:深⼊理解
Inside Qt 系列
QKevin所著,通过剖析Qt源代码,深⼊浅出的解释了Qt中的许多机制,了解Qt内部是如何 work 的。
着实为想深⼊了解Qt的开发者提供了很好的学习机会。如果你已经学习了上⾯的内容并且熟练掌握Qt编程,那么⼤⼒推荐这⼀系列⽂章!
写了这么多年的程序,除了留下很多 code (其中有很多是garbage)之外,再没有其它东西,或许我该写点⼉什么了,写⼀些关于我的⼯作的东西,⾃⼰所了解的技术,也把⾃⼰在⼯作过程中新学习的⼀些东西放在这⼉,就算是为了以后做⼀个参考。
QObject 这个 class 是 QT 对象模型的核⼼,绝⼤部分的 QT 类都是从这个类继承⽽来。这个模型的中⼼特征就是⼀个叫做信号和槽(signal and slot)的机制来实现对象间的通讯,
我们知道,在C++中,⼏乎每⼀个类(class)中都需要有⼀些类的成员变量(class member variable),在通常情况下的做法如下:
在 QT 4.4 中,类成员变量定义⽅法的出发点没有变化,只是在具体的实现⼿段上发⽣了⾮常⼤的变化,下⾯具体来看。
接上节,让我们来看看这个 QObjectPrivate 和 QObject 是如何关联在⼀起的。
从本节开始,我们讲解 QT Meta-Object System 的功能,以及实现。在使⽤ Qt 开发的过程中,⼤量的使⽤了 signal 和 slot. ⽐如,响应⼀个 button 的 click 事件,我们⼀般都写如下的代码:
元对象编译器⽤来处理QT 的C++扩展,moc 分析C++源⽂件,如果它发现在⼀个头⽂件(header file)中包含Q_OBJECT 宏定义,然后动态的⽣成另外⼀个C++源⽂件
信号和 槽是⽤来在对象间通讯的⽅法,当⼀个特定事件发⽣的时候,signal会被 emit 出来,slot 调⽤是⽤来响应相应的 signal 的。
前⾯我们介绍了 Meta Object 的基本功能,和它⽀持的最重要的特性之⼀:Signal & Slot的基本功能。现在让我们来进⼊ Meta Object 的内部,看看它是如何⽀持这些能⼒的。
我们来看⼀下QMetaObject的定义,我们先看⼀下QMetaObject对象中包含的成员数据。
我们都知道,把⼀个signal和slot连接起来,需要使⽤QObject类的connect⽅法,它的作⽤就是把⼀个object的signal和另外⼀个object 的slot连接起来,以达到对象间通讯的⽬的。
当我们写下⼀下emit signal代码的时候,与这个signal相连接的slot就会被调⽤,那么这个调⽤是如何发⽣的呢?让我们来逐⼀解开其中的谜团。
很多C/C++初学者常犯的⼀个错误就是,使⽤malloc、new分配了⼀块内存却忘记释放,导致内存泄漏。Qt的对象模型提供了⼀种Qt对象之间的⽗ ⼦关系..
⾸先,让我们来看看Qt/e的系统结构介绍:Qt for destop Linux 和 Qt for Embedded Linux 最⼤的区别就在于他们所依赖的底层显⽰基础的不同,这也就导致了他们在体系结构上的差异。
本输⼊法设计指南针对Qt for Embedded Linux 4.5.1,并且以中⽂输⼊法为例做说明,并且本⽂只是侧重于说明Qt/Embedded对输⼊法的⽀持接⼝,
前⾯我们介绍了Qte输⼊法的基本设计思路,以及⼀个最简单的例⼦,那么,Qte的输⼊法是如何⼯作的呢?本节我们就来看⼀下Qte的源代码,⼀起来解开这个谜团。
Happy Qt coding….
© 特别感谢Q-Kevin,FinderCheng,caterpillar的原创⽂章,所有⽂章都已注明出处。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论