精通Qt4编程(第二版)

第一章 Qt 初步实践


  • 集成开发环境: KDevelop , vim

第二章 对话框


  • Q_OBJECT 启动Qt元对象系统的一些特性,比如支持信号与槽等,它必须防止到类定义的私有区。
  • QDialog 类的虚函数 virtual void accept(), 验证对话框的返回值。
  • QLineEdit::setEchoMode(), 设置编辑框对象的内容显示方式,Normal, Password, NoEcho, PasswordEchoOnEdit,
  • QVBoxLayout::setMargin(), 设置边界
  • QVBoxLayout::addStretch(), stretch 可以自由拉伸
  • QString::trimmed() 移除两端的 '\t', '\n', '\v', '\f', '\r' ' '
  • QMesssgeBox::about, QMessageBox::aboutQt, QMessageBox::information, QMessageBox::question, QMessageBox::warning, QMessageBox::critical, 模态消息对话框使用父窗口的图标,后四种对话框都具备返回值。
  • QMessageBox::setDetailedText()
  • 非模态对话框,必须在堆中创建。
  • T qobject_cast(QObject* object); 类型T必须直接或者间接从QObject的类继承, 并且在该类的定义里有Q_OBJECT宏变量(否则返回值是未定义的)
  • QColor::isValid(), 判断颜色对话框返回的颜色值是否有效。
  • QProgressDialog::setWindowModality(Qt::WindowModal); 设置进度模态对话框的话,需要用 qApp->procesEvents() 推动事件循环

第三章 基础窗口控件


  • 一个QLabel和一个窗口部件有伙伴关系,即指当前用户激活标签的快捷键时,鼠标/键盘的焦点将会转移到它的伙伴窗口部件上。只有QLabel标签对象才可以有伙伴窗口部件,也只有该QLabel对象具有快捷键(在显示文本的某个字符前面添加一个前缀“&”,就可以定义快捷键)是,伙伴关系才生效。
  • Q_INIT_RESOURCE(hello); 初始化资源hello.qrc
  • FORMS += ../../hello.ui 告诉qmake,引入文件引入 工程,通过调用setupUi()初始化和部署窗口部件。
  • 多继承情况下,Qt的类必须要放在其他类的前面,这是因为元对象编译器假定第一个继承类是QObject的子类,此外Qt不支持对QObject的虚继承。
  • 不同于回调函数机制,Qt提供了信号和槽机制,信号是一个特定的标识;一个槽就是一个函数,与一般的函数不同,槽函数既可以和信号关联,也可以像普通函数一样直接调用。当某个时间出现时,通过发送信号,可以将与之关联的槽函数激活,即执行槽函数代码。关联方式:一个信号和一个槽关联,一个信号和多个槽关联,多个信号和一个槽关联,一个信号和一个信号进行关联。[Qt::AutoConnection]
  • QTableWidget 与 QTableWidgetItem , insetRow(), insertItem(row, column, item)
  • 信号和槽的自动关联: void on_<窗口部件>_<信号名>_(<信号参数>);
  • QWidget 提供了一些处理窗口部件的几何布局函数,可以分为两类:第一类,包含窗口边框的处理函数,有x(), y(), frameGeometry(), pos() 和 move(); 第二类,有 width(), height(), geometry(), rect(), size(), resize()。
  • QObject::className() 返回类名,QObject::inherits() 判断一个对象是否是某个指定类的子类实例
  • QObject::tr() 和 QObject::trUtf8(), 进行国际化的字符串翻译
  • 属性系统基于元对象系统,通过宏Q_PROPERTY()声明一个属性:必须有一个读函数;一个可选的写函数;一个可选的重置函数,重置函数必须返回void并且没有任何参数;一个可选的DESIGNABLE属性,表明属性是否在GUI构造器中可用,可写属性默认为true,可读属性默认为false;一个可选的SCRIPTABLE,表明脚本引擎是否可以访问该属性,可写属性默认为true,可读属性默认为false;一个可选的STORED特性,表面该属性是否持久的,即当存储一个对象时,是否保存该属性的值,该特性支队可写属性有意义,默认值为true。多重继承的时候,属性必须继承来自第一个父类。
  • Q_ENUMS(enum_type), Q_FLAGS(enum_type)
  • QObject::setProperty() , QObject::property()
  • Qt支持的隐式共享的类:所有容器类,QByteArray, QBitmap, QBrush, QCursor, QDir, QFont, QImage, QPen, QPalette, QPixmap, QVariant.

第四章


第五章 布局管理


  • 绝对位置方式:setGeometry();手工布局方式:重载QWidget::resizeEvent(QResizeEvent*);布局管理器方式:Q*Layout。
  • QWorkSpace, QDockWidget, QStackedWidget, QSplitter, QMdiArea

第六章 2D 绘图


  • drawTiledPixmap() 平铺图形
  • QPicture 存储QPainter 指令,将绘图指令串行化为平台无关的格式存储。
  • Qt 支持 RGB, HSV, CMYK 颜色模型。RGB是面向硬件的模型,颜色由红, 绿, 蓝三种基本色混合而成。HSV模型则比较符合人对颜色的感觉,由色调(0 ~ 359), 饱和度(0 ~ 255), 亮度(0~255)组成。CMYK,由青,洋红,黄,黑四种基色组成,主要用在打印机等硬拷贝设备上,每个颜色分量的取值为0~255。另外QColor还可以使用SVG1.0中定义的任何颜色名为参数初始化。
  • Qt 提供了渐变填充的画刷,渐变填充包括两个要素:颜色的变化和路径的变化。颜色的变化可以指定从一种颜色渐变到另外一种颜色,也可以在变化的路径上指定一些点的颜色进行分段渐变。在Qt4中,提供了三种渐变填充:线性(QLinearGradient),圆形(QRadicalGradient),圆锥渐变(QConicalGradient)。所有类均从QGradient类继承。其中线性见比昂指定控制点,画刷在控制点之间进行颜色插值。圆形渐变需要指定圆心,半径和焦点,画刷在焦点和圆上的所有点之间进行颜色插值。圆锥渐变需要指定圆心和开始角,画刷沿着圆心逆时针对颜色进行插值。
  • 关闭窗口部件的双缓冲:widget->setAttribute(Qt::WA_PaintOnScreen)
  • Qt4 能够支持Alpha通道。通过使用Alpha通道,可以实现半透明效果。QColor类中定义了Alpha通道的透明度,0表示完全透明,255表示完全不透明,默认情况下是完全不透明。(Qt使用的Alpha公式:color = color_src * alpha_src + color_dest * (255 - alpha_src), alpha = src_alpha)
  • QBitMap 从 QPixmap 继承,QBitMap表示单色的pixmap,主要用来创建自定义的QCursor和QBrush对象,构造QRegion对象,设置pixmap和窗口部件的掩码。
  • 当QPainter 绘制指定的字体中不存在的字符时,将绘制一个空心的正方形。
  • Qt提供了4个处理图像的类:QImage,QPixmap,QBitMap和QPicture。他们有各自的特点,QImage优化了IO操作,可以直接存取操作像素数据;QPixmap主要用来在屏幕上显示图像;QBitMap从QPixmap继承,只能表示两种颜色;QPicture是可以记录和重放QPainter命令的类。
  • QImage的颜色数据格式,QRgb 实际是无符号整形数,存储ARGB的格式是0xAARRGGBB。32位的图像直接存储;单色图像使用一位的索引指向只有两种颜色的调色板,有两种类型的单色图big endian(MSB)和little endian(LSB);256色的图使用8位索引的调色板。颜色数据有三种类型的存储格式:RGB,ARGB和已预乘的ARGB。

第十一章 Qt 线程


  • 在具有图形用户界面的Qt应用程序中,主线程由GUI线程充当,该线程是Qt中唯一可以进行GUI相关操作的线程,即一个具有图形节目的Qt应用程序只能有一个GUI线程。
  • GUI线程是唯一一个允许创建QApplication对象并且对它调用exec()函数的线程。
  • QObject::moveToThread()函数改变QObject对象所属的线程,但是如果这个QObject对象有父对象将无法移动,在QApplication对象创建前构造的QObject对象的thread()函数返回0,也就意味着主线程只处理这些QObject对象的posted事件,而不处理其他事件,原因是这些QObject对象不属于任何线程。任何时候调用QApplication::postEvent()函数向任意线程创建的对象发消息,这个消息最终都会被派发到创建这个对象所属的事件循环。
  • 删除属于其他线程的QObject,必须使用QObject::deleteLater()函数发出一个DeferredDelete事件,并最终被目标QObject对象所属的事件循环接受处理
  • 线程本地存储,QThreadStorage<TYPE_PTR>, 模板类,只能存储指针,setLocalData()为调用线程存储一份独立的数据,这个数据通过localData()函数访问,并且持有的数据只能是new出来的。hasLocalData()可以查询算法已经设置了本地数据,当线程退出的时候,会自动释放拥有的数据。
  • 如果所启动的线程中没有事件循环,那么事件将不会发往该线程创建的QObject对象。
  • QObject对象还必须遵循如下约束:QObject子对象必须在其父对象的线程中创建;事件驱动类只能用于单线程;必须保证在某个线程中创建的所有对象在该线程释放前首先被释放。
  • 当信号的发送者和接受者分别属于不同的现场且接受者线程存在自身的事件循环时,使用直接连接方式是不安全的。
  • QtConcurrent 提供并行计算能力,QFuture类返回计算结果,提供QFutureWatcher类,监视QFuture。

第十二章 事件处理


  • Qt中定义的事件是一个从QEvent类继承而来的对象,它表示应用程序内部或外部发生了某些应用程序自身必须知道的事情。任何从QObject类派生的对象均可以通过QObject::event()方法接受事件。
  • 事件处理方法,重新实现事件处理接口,类似mousePressEvent();重新实现QObject::event()函数,可以在事件到达特定的事件处理接口前处理它们;在QObject中注册事件过滤器,目标对象中的所有事件首先发送给这个监视对象的eventFilter();在QApplication中注册事件过滤器,如果事件过滤器被注册到程序中唯一的QApplication对象上,应用程序中所有对象的每一个事件在它们被送达其他事件过滤器前,首先抵达这个eventFilter()函数;继承QApplication并重新实现notify()函数,重新实现这个函数是在事件过滤器得到所有事件前获得它们的唯一方法。
  • 如果事件到达目标对象之前没有被截获处理,或者没有被它的目标对象处理,那么此时,目标对象的父对象将变成新的目标对象,整个事件处理将重复进行,直到该事件被处理或者到达顶层对象。
  • Qt中加快用户界面响应通常有三种方法:第一种方法是使用线程;第二种是在处理耗时事件时频繁调用QApplication::processEvents();第三种方法是推迟耗时事件处理,直到应用程序空闲下来。
  • Qt中有一个0毫秒计时器,只要主循环中没有未被处理的事件,这个定时器就会被触发。

第十四章 界面风格


  • QWidget::repaint() 和 QWidget::update()的区别,QWidget::repaint()函数会导致Qt立即调用QWidget::paintEvent()进行界面重绘,而QWidget::update函数不会导致人机界面的立即重绘,只有当Qt应用程序返回到主事件循环,Qt才会调度一个绘制事件。
  • Qt的样式表对大小写不敏感,但对类名,对象名和属性名大小写敏感。

第十五章 XML


  • Qt 支持 DOM Level 2 规范

第十六章 模型视图结构


  • Qt 的模型视图结构分为三部分:模型,视图和代理。模型和数据源通信,并为其他部件提供接口。视图从模型中获取模型索引,模型索引用来引用数据条目。在视图中,代理负责绘制数据条目,当编辑条目时,代理和模型直接进行通信。
  • 模型,视图和代理之间通过信号和槽进行通信,其关系如下: 数据发生改变时,模型发出信号通知视图;用户对界面进行了操作,视图发出信号;代理发出信号告知模型和视图编辑器目前的状态;
  • 模型索引只是提供了临时索引信息,因为模型可能对内部的结果进行重新组织,所以模型索引可能在下一次使用时失效。如果索引要长期引用,可以使用QPersistentModelIndex类保存模型索引。
  • 如果想对模型的数据进行处理,如进行排序和过滤,可以使用代理模型。代理模型提供了模型和视图之间的数据处理代理,使得源模型和视图之间的数据能够进行一些特殊的处理。Qt提供了QSortFilterProxyModel代理模型完成排序和过滤操作。
  • 通常情况下,如果要使用定制的视图,可以通过实现条目代理来完成。
  • Qt使用抽象类QAbstractItemDelegate作为代理类的基类。用户实现代理类时,至少要实现两个纯虚函数,其中,paint()函数完成绘制,sizeHint()函数返回条目的尺寸。大部分情况下,可以直接从Qt已经实现的通用QItemDelegate类继承,以减少代码量。
  • 对于不同的数据类型,QItemDelegate提供了默认的编辑方式。也可以通过QItemEditorFactory类来注册特定的数据类型编辑器。

十八章 进程与进程间通信


  • 从Qt4.2版本引入了一项新的进程间通信技术D-Bus,并提供了相应的变成模块QtBus。
  • 常说的"进程间通信"是指有一定效率要求的通信手段,通常由操作系统内核提供支持,具体而言包括消息队列,信号量,共享存储,SOCKET管道(包括普通管道,流管道和命名管道)。
  • 共享内存和本地Socket是实现单机进程间通信的两种常见方法,Qt从4.4版本开始对这两个方面进行了支持,主要包括QSharedMemory,QLocalSocket和QLocalServer类。
  • D-Bus 是一种进程间通信(IPC,Inter Process Communication)和远程调用(RPC,Remote Procedure Call)机制,最初为Linux系统开发,它用一套统一的协议替代现有系统中相互竞争的IPC方案。它的设计同样支持系统级进行和普通用户进程间的通信。D-Bus是一种高速的二进制消息传输协议,具有低延时和低开销的特点,非常适合本机通信。

转载于:https://www.cnblogs.com/JefferyZhou/archive/2012/09/24/2700331.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
初 级 篇 \第1章 Qt初步实践 2 \1.1 第一个Qt程序 2 \1.1.1 建立主程序 2 \1.1.2 建立工程 3 \1.1.3 编译/运行第一个Qt应用程序 8 \1.1.4 第一个Qt程序的代码分析 8 \1.2 使用Qt布局管理器 11 \1.3 关联操作 12 \1.4 小结 13 \第2章 对话框——QDialog 14 \2.1 自定义对话框 14 \2.1.1 建立新类 14 \2.1.2 添加子窗口部件 15 \2.2 加入主程序 22 \2.3 Qt内建(built-in)对话框 24 \2.4 小结 34 \第3章 基础窗口部件——QWidget 35 \3.1 Qt设计器绘制窗口部件 35 \3.1.1 Qt设计器基础 35 \3.1.2 绘制窗口部件 40 \3.2 程序中引入自定义窗口部件 47 \3.2.1 直接使用方式 47 \3.2.2 单一继承方式 49 \3.2.3 多继承方式 51 \3.3 Qt的信号和槽机制 53 \3.3.1 基本原理 53 \3.3.2 设计信号和槽 55 \3.3.3 信号和槽的自动关联 62 \3.4 窗口标志及几何布局 63 \3.4.1窗口标志 64 \3.4.2窗口部件的几何布局 66 \ \3.5 Qt样式表 74 \3.5.1 样式表语法 74 \3.5.2 样式表的应用 76 \3.6 Qt对象模型 79 \3.6.1 元对象系统 79 \3.6.2 属性系统 80 \3.6.3 对象树 83 \3.7 小结 86 \第4章 程序主窗口——QMainWindow 87 \4.1 QMainWindow主窗口框架 87 \4.2 Qt设计器绘制主窗口 88 \4.2.1 菜单 90 \4.2.2 工具栏 93 \4.2.3 中心部件 96 \4.3 代码创建主窗口 98 \4.3.1 创建资源文件 98 \4.3.2 定义主窗口类 98 \4.4 锚接部件 102 \4.5 状态栏 105 \4.6 实现文本编辑器功能 107 \4.7 多文档 118 \4.8 打印文档 119 \4.9 小结 120 \第5章 布局管理 121 \5.1 Qt布局管理器——QLayout 121 \5.1.1 Qt布局管理器简介 121 \5.1.2 布局管理器及窗口部件大小策略 \5.1.2 的应用 125 \5.2 分裂器部件QSplitter 132 \5.3 栈部件QStackedWidget 134 \5.4 工作空间部件QWorkspace 135 \5.5 多文档区部件QMdiArea 148 \5.6 小结 150 \ \中 级 篇 \第6章 2D绘图 152 \6.1 Arthur绘图基础 152 \6.1.1 绘图 152 \6.1.2 绘图设备 174 \6.2 坐标系统与坐标变换 175 \6.2.1 坐标系统 175 \6.2.2 坐标变换 175 \6.3 用不同的字体 177 \6.4 绘图路径——QPainterPath 180 \6.5 QImage与QPixmap绘图设备 182 \6.5.1 QImage 182 \6.5.2 Pixmap 183 \6.6 组合模式绘图 192 \6.7 Graphics View框架 200 \6.7.1 Graphics View体系结构 200 \6.7.2 Graphics View坐标系统 201 \6.7.3 深入Graphics View 202 \6.8 图形图像打印 208 \6.8.1 普通打印过程 208 \6.8.2 特殊窗口部件的打印 210 \6.9 小结 211 \第7章 拖放操作和剪贴板 212 \7.1 拖放操作 212 \7.1.1 拖放操作 212 \7.1.2 定义新的拖放操作类型 214 \7.1.3 Graphics View框架下的拖放 \7.1.3 操作 215 \7.2 使用剪贴板 217 \7.3 小结 218 \第8章 文件处理 219 \8.1 读写文本文件 219 \8.2 操作二进制文件 220 \8.3 临时文件 222 \8.4 目录操作和文件管理 222 \8.4.1 目录操作 222 \8.4.2 文件管理 224 \8.5 监视文件系统变化 225 \8.6 文件引擎 226 \8.7 小结 226 \第9章 网络 227 \9.1 FTP客户端 227 \9.2 HTTP客户端 235 \9.3 UDP应用 239 \9.4 TCP应用 243 \9.5 高级应用 253 \9.5.1 底层操作 253 \9.5.2 使用代理 256 \9.5.3 扩展Qt网络功能 256 \9.5.4 效率问题 260 \9.6 小结 260 \第10章 多线程 261 \10.1 启动一个线程 261 \10.2 线程互斥与同步 264 \10.2.1 临界区问题 265 \10.2.2 使用QMutex 265 \10.2.3 使用QSemaphore 266 \10.2.4 使用QWaitConditon 269 \10.3 线程的其他问题 271 \10.3.1 优先级问题 271 \10.3.2 死锁及优先级反转问题 274 \10.3.3 本地存储问题 275 \10.4 Qt的线程机制 276 \10.4.1 可重入与线程安全 276 \10.4.2 线程与事件循环 277 \10.4.3 线程与信号/槽机制 278 \10.4.4 多线程网络示例 279 \10.5 小结 282 \第11章 事件处理 283 \11.1 事件机制 283 \11.1.1 事件来源与类型 283 \11.1.2 事件处理方法 284 \11.2 事件处理器 285 \11.3 事件过滤器 290 \11.4 加快用户界面响应 292 \11.4.1 使用processEvents()函数 293 \11.4.2 使用定时器 294 \11.5 小结 296 \第12章 数据库 297 \12.1 连接数据库 297 \12.2 常用数据库操作 301 \12.2.1 使用SQL语句 302 \12.2.2 事务操作 304 \12.2.3 使用SQL模型类 304 \12.2.4 数据表示 308 \12.3 Qt数据库应用 310 \12.3.1 使用嵌入式数据库 310 \12.3.2 使用Oracle数据库 313 \12.4 小结 325 \第13章 Qt的模板库和工具类 326 \13.1 Qt容器类 326 \13.1.1 QList、QLinkedList和QVector 327 \13.1.2 QMap、QHash 332 \13.2 QString 334 \13.2.1 隐式共享 335 \13.2.2 内存分配策略 336 \13.2.3 操作字符串 336 \13.2.4 查询字符串数据 337 \13.2.5 字符串的转换 338 \13.3 QVariant 339 \13.4 Qt的算法 341 \13.5 正则表达式 342 \13.5.1 基本的正则表达式 342 \13.5.2 文字捕获 344 \13.6 小结 345 \高 级 篇 \第14章 XML 348 \14.1 DOM 348 \14.1.1 DOM入门 348 \14.1.2 使用DOM 348 \14.1.3 使用DOM写XML文件 352 \14.2 SAX 354 \14.3 基于流的XML API 359 \14.4 小结 365 \第15章 模型/视图结构 366 \15.1 模型/视图结构与MVC设计 \15.1 模式 366 \15.1.1 模型 366 \15.1.2 视图 367 \15.1.3 代理 368 \15.2 使用已有的模型视图类 368 \15.2.1 使用已有的模型和视图类 368 \15.2.2 QListWidget、QtreeWidget \15.2.2 和QTableWidget 370 \15.3 模型(Models) 381 \15.3.1 模型索引 381 \15.3.2 模型角色 382 \15.3.3 自定义模型 382 \15.3.4 代理模型 385 \15.4 视图(Views) 390 \15.4.1 自定义视图 390 \15.4.2 数据-窗口部件映射 390 \15.5 代理(Delegates) 396 \15.5.1 使用已有的代理 396 \15.5.2 自定义代理 396 \15.6 拖放与选中 401 \15.6.1 拖放操作 401 \15.6.2 选中模式 404 \15.7 小结 405 \第16章 高级绘图 406 \16.1 3D绘图——使用OpenGL 406 \16.1.1 创建OpenGL窗口 406 \16.1.2 着色 410 \16.1.3 3D和旋转 411 \16.1.4 纹理贴图 414 \16.2 SVG 417 \16.2.1 绘制SVG图形 418 \16.2.2 生成SVG文件 419 \16.3 小结 420 \第17章 进程与进程间通信 421 \17.1 使用QProcess 421 \17.2 Linux进程间通信 423 \17.3 新型进程间通信——D-Bus 425 \17.3.1 D-Bus简介 425 \17.3.2 安装QtDBus模块 427 \17.3.3 接口与适配器 429 \17.3.4 QtDBus应用实例 432 \17.4 小结 441 \第18章 Qt插件 442 \18.1 Qt插件开发基础 442 \18.2 Qt设计器插件 443 \18.2.1 使用Scratchpad 443 \18.2.2 提升自定义窗口部件 444 \18.2.3 Qt设计器插件开发 444 \18.3 编写数据库插件 451 \18.4 自定义风格插件 455 \18.5 小结 458 \第19章 脚本——QtScript 459 \19.1 执行ECMAScript脚本 459 \19.2 QtScript中的信号和槽 460 \19.3 使用JavaScript操作Qt对象 463 \19.4 基于Prototype的继承 467 \19.5 小结 467 \第20章 国际化 468 \20.1 Unicode与字符编码 468 \20.1.1 Unicode 468 \20.1.2 汉字编码 469 \20.1.3 编码转换 469 \20.2 Qt Linguist 471 \20.2.1 发布管理器 472 \20.2.2 翻译器 474 \20.2.3 加载翻译文件 476 \20.3 语言切换 477 \20.4 小结 477 \第21章 Qt单元测试框架 478 \21.1 QTestLib框架 478 \21.1.1 QTestLib 478 \21.1.2 第一个Qt单元测试 478 \21.2 数据驱动测试 480 \21.3 GUI测试 481 \21.2.1 仿真GUI事件 481 \21.2.2 重放GUI事件 483 \21.3 小结 484 \附录A Qt安装 485 \附录B Qt集成开发环境 492 \附录C qmake速查 501 \附录D 深入Qt源代码 506 \附录E Qt资源 512 序言/前言    前言 \两年前,当我们准备在Linux系统下开发GUI应用软件时,首先想到的就是选择一个GUI应用框架来简化开发。在三大GUI框架GTK+、Qt和wxWidgets 之间,我们选择了Qt 4工具包。作为重量级桌面系统KDE多年的坚实基础,Qt应该是经受了足够的考验。当我们准备编写自己的应用软件时,却发现图书市场上没有一本关于Qt 4的书籍,仅有的只是一些关于Qt 3的资料。由于Qt 3到Qt 4的变化很大,甚至源代码都不兼容,所以这些资料的参考价值并不是太大。于是,我们通过阅读Qt的assistant和examples来学习并使用Qt 4。在逐渐掌握Qt 4的过程中,我们萌发了编写一本关于Qt 4的书来帮助初学者入门的想法。最终,在电子工业出版社博文视点资讯有限公司的大力支持下,我们的想法终于得以付诸实施。 \关于Qt \Qt是挪威的Trolltech公司的旗舰产品,作为跨平台的应用程序框架,是开源的桌面系统KDE的基石。Google Earth,Skype,Opera,Adobe Photoshop Elements,Peforce Visual Client等软件都是基于Qt写成。自Trolltech公司1996年推出Qt 1.0版以来,Qt已经从2.x,3.x发展到了现在的Qt 4.3,本书就是基于最新的Qt 4.3写成。因为Qt 4框架设计得非常优秀,在2006年的第16届Jolt大奖上,Qt 4获得了类库、框架和组件类别的Jolt生产力奖。 \和Java的“一次编译,到处运行”跨平台不同的是,Qt是源代码级的跨平台,一次编写,随处编译。一次开发的Qt应用程序可以移植到不同的平台上,只需重新编译即可运行。Qt支持的平台有: \? Microsoft Windows,包括Windows 98/NT 4.0/2000/XP/Vista; \? UNIX/X11,包括Linux,Sun Solaris,HP-UX,HP Tru64 UNIX,IBM AIX,SGI IRIX等; \? Mac OS X,支持Mac OS X 10.3以上版本; \? 嵌入式Linux,包括支持framebuffer的所有Linux平台。 \Qt还支持嵌入式系统,Qt的嵌入式版本称为Qtopia Core,可以在多种处理器上运行,目标操作系统通常是嵌入式Linux。Qtopia Core应用程序直接使用framebuffer,而不是笨重的X Window系统。Qt相关的另一个产品——Qt Jambi,则是基于Qt库构建的,面向Java程序员的应用程序框架。另外,还有一些开源的在其他语言上的Qt绑定,如C#/Mono的绑定Qyoto,Python的绑定PyQt,Ruby的绑定QtRuby等。有了这些产品,编写Qt程序不再是C++程序员的专利了。 \Qt的发行版本有商业版和开源版。开源版遵循QPL(Q Public License)和GPL(GNU General Public License)协议,商业版则提供了一些特有的模块,如Windows平台上的ActiveQt框架,Oralce、DB2等商业数据库的驱动。本书主要介绍开源版的Qt 4.3。 \阅读本书的基础 \阅读本书的读者需要具有基本的C++程序设计知识,毕竟Qt是用C++编写的应用程序框架。如果要学习QtScript,还需要了解JavaScript。 \本书的结构 \本书共21章,每章讨论一个专题。章节安排上基本采用循序渐进、由浅到深的原则。但最后的高级篇中的章节没有很强的关联,可以按照随意的顺序阅读。每章内容及作者分述如下: \篇章 章 名 作者 内 容 简 介 页码 \初级篇 第1章 Qt初步实践 卢传富 建立了第一个较简单的Qt应用程序,在GUI用户界面中显示一行中文。 2 \ 第2章 对话框 \——QDialog 卢传富介绍了Qt的对话框类QDialog,实现了一个自定义的登录对话框,举例说明了Qt提供的内建对话框类的应用。 14 \ 第3章 基础窗口部件——QWidget 卢传富 \蔡志明首次引入Qt设计器的使用,绘制并实现了一个查找文件功能的部件,介绍了Qt应用程序中使用ui文件的基本方法以及Qt样式表;较深入地分析了Qt对象模型的一些基本知识,涉及信号和槽机制、Qt元对象系统、属性系统和对象树机制,以及部件类型和部件的几何布局等内容。 35 \ 第4章 程序主窗口—— QMainWindow 卢传富 Qt应用程序的主窗口是由多个部件/组件构成的框架,本章通过一个简单文本编辑器的例子,介绍了主窗口的菜单、工具条、中心部件、锚接部件和状态条,并通过Qt设计器绘制和手写代码两种方法实现了简单文本编辑器主窗口界面的排布和管理。 87 \ 第5章 布局管理 卢传富布局管理是GUI应用程序编程的一个重要方面。Qt提供了多种布局管理部件,包括Qt布局管理器、分裂器、栈部件、工作空间部件和多文档区部件等。本章一一介绍了这些部件,并举例说明了它们在图形用户界面编程中的应用。 121 \中级篇 第6章 2D绘图 蔡志明本章内容较多,包括Qt的绘图要素、图形变换与坐标系统、绘图设备、图像处理、图像打印等。最后讲解了Qt 4图形系统的模型视图框架——Graphics View框架。 152 \ 第7章 拖放操作与剪贴板 蔡志明 本章简要地说明了基于MIME的拖放操作和剪贴板的使用,关于Graphics View框架的拖放操作也在本章。 212 \ 第8章 文件处理 蔡志明介绍了Qt的文件处理,包括基于流的文本文件和二进制文件处理,文件信息和目录操作,目录以及文件的变化监控,文件引擎的编写。 219 \ 第9章 网络 李立夏介绍了Qt的网络处理,包括编写常见的FTP、HTTP、UDP和TCP程序,以及访问底层网络接口信息和扩展Qt网络模块功能的方法。 227 \ 第10章 多线程 李立夏介绍了Qt的多线程处理,包括两方面内容:传统的线程操作,以及与Qt事件机制相关的操作。这一章还涉及较多的基本概念,并逐一做了介绍。 261 \ 第11章 事件机制 李立夏介绍了Qt的事件处理模型,详细介绍了在Qt程序设计中处理事件的五种方法,并讨论了如何利用Qt事件机制加快用户界面响应速度。 283 \ 第12章 数据库 李立夏介绍了Qt的数据库处理,重点介绍了如何在Qt中使用SQL语句进行数据库操作和如何利用QSqlTableModel这类高层次类进行常见的数据库编程。 297 \ 第13章 Qt的模板库和工具类 卢传富 \蔡志明 Qt提供了丰富的模板库和工具类,本章只是介绍了部分内容。在这一章,重点介绍了Qt的容器类、QString和QVariant类,简介了Qt的算法和Qt正则表达式的使用。 326 \ \ \续表 \篇章 章 名 作者 内 容 简 介 页码 \高级篇 第14章 XML 蔡志明对Qt中的三种XML解析方式(DOM、SAX和基于流的解析)进行了比较和举例。还讲解了如何使用API写XML文件。 348 \ 第15章 模型/视图结构 蔡志明阐述了Qt的模型/视图结构,分别对模型视图的三个组成部分(模型、视图和代理)进行了介绍,演示了如何自定义这些组成部分,并简要说明了拖放以及选中操作。 366 \ 第16章 高级绘图 蔡志明叙述了在Qt中如何使用OpenGL绘图,对基本的OpenGL绘图进行了讲解,介绍了矢量图型文件SVG的读写操作。 406 \ 第17章 进程间通信 李立夏 介绍进程和进程间通信的知识,重点介绍了Qt中桌面环境下基于D-Bus的多进程应用程序开发。 421 \ 第18章 Qt插件 蔡志明 说明了Qt的插件系统,并对Qt Designer插件、数据库插件、风格插件进行了较详细的介绍。 442 \ 第19章 脚本——QtScript 蔡志明 这是Qt 4.3中引入的最新内容,使得Qt能够支持ECMAScript脚本。本章简要地举例说明了在Qt中如何使用脚本,如何将C++对象暴露给脚本。 459 \ 第20章 国际化 骆艳 本章包括编码的处理,Qt Linguist的使用步骤,动态语言切换的内容。 468 \ 第21章 Qt单元测试框架 蔡志明 本章阐述了如何使用QTestLib框架进行数据测试、GUI测试。 478 \ 附录A~E 蔡志明附录中包括Qt在Linux、Windows、Solaris上的安装,KDevelop、Eclipse集成开发环境的使用,qmake的基本应用,Qt源代码分析举例,Qt资源。 485 \如何获取源代码 \由于Qt是跨平台的,因此书中的内容应用能够在Windows、Linux、UNIX和Mac OS上运行,书中的程序可能是在下列三种平台之一上编写:Windows XP/Vista、Linux(SuSE、Fedora Core或红旗)以及Solaris 10 SPARC/X86。因此书中的屏幕截图可能来源于其中的任何一种操作系统。 \要获取本书的源代码,可以访问博文视点资讯有限公司网站获取: \ www.broadview.com.cn。 \致谢 \本书在写作出版的过程中,得到了电子工业出版社孙学瑛编辑的大力帮助,没有她细致的工作和有益的建议,本书难以最终出版,在此,作者向孙学瑛编辑表示诚挚的谢意。 \问题反馈 \欢迎广大读者和专家对本书提出建议和批评。如果您认为书有错误或对我们有什么建议,可以联系jsj@phei.com.cn。 \ \蔡志明 卢传富 李立夏 \2007年11月30日于武汉
精通qt4编程第二版源码是《精通Qt 4编程》一书的附件,包含了书中示例程序、配套教学视频和相关资源。它是帮助读者更好地理解和学习Qt 4编程的重要辅助教材。 这本书是Qt编程领域的经典之作,通过深入浅出的教学方法和丰富的实例,向读者介绍了Qt开发框架的各个方面,包括窗口设计、布局、事件处理、Qt信号与槽机制、多线程编程、网络编程等。并且,这本书还介绍了如何使用Qt设计跨平台的GUI程序,让开发者能够在不同的操作系统上快速构建可靠的应用程序。 《精通Qt 4编程第二版的源码是书中所有实例程序的源代码。它通过实例程序的方式,结合书中的教学内容,帮助读者更好地理解和掌握Qt编程技术。读者可以下载源码,运行和调试实例程序,通过实践学习掌握不同章节的知识点。同时,源码中还注释了关键代码说明,使读者能够更直观地理解程序的工作原理和过程。 获取源码的方式一般有两种:一是通过书中提供的下载链接获取,读者可以登录相关网站,注册账号并下载源码。二是通过购买正版书籍,书中会提供源码的光盘或二维码等形式,读者可以通过扫描二维码或光盘安装程序获取源码。 总之,《精通Qt 4编程第二版源码是一本非常有价值的资源,对于想要系统学习和掌握Qt编程的读者来说具有很高的参考价值。通过阅读书籍并运行源码,读者可以更加深入地理解Qt的特性和应用,提高自己的编程水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值