Qt入门教程-C++ Qt GUI编程基础

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基本技术
参考文献
1. 2. 3. 4.
C++ GUI Qt 4编程 高级Qt编程 Qt在线帮助文档 http://download.qt-project.org/
谢谢!
起源与发展
开发平台与编译器
Qt 4.x支持的平台 桌面系统Windows,Unix,Linux/X11, Mac OS X 嵌入式系统Embedded Linux 移动终端系统Symbian, Qt 5.0.x支持Android的开发。 Qt 5.1 Beta支持IOS和Android应用程序的开发。
基本技术
面向对象
Qt独有特性的实现 一部分是通过Qt元对象系统(MetaObject System)和元对象编译器(MetaObject Compiler)实现的。 另一部分是通过继承QObject类用C++实 现的。 元对象系统和元对象编译器是Qt对C++ 的扩充。用纯C++实现,能使Qt更适合于组 件GUI编程。
起源与发展
版本与授权
1996年,Qt 1.0正式发布 1999年,Qt 2.0发布 2001年,Qt 3.0发布 2005年,Qt 4.0发布 包含大约500多个类和9000多个函数。 Qt 4比以往的任何一个版本都要全面和丰富。 2012年12月,Qt 5 Alpha发布。 与Qt 4相比,Qt 5在内部架构上发生了很 大的变化。 最新官方发布版本是Qt 5.0.2,最新开发 发布版本是Qt 5.1.0-beta1。 开源版本(GPL协议)和商业版本
起源与发展
大事记
1994年 创立“Quasar Technologies”公司,后 来改名为“Trolltech”(奇趣科技)。 1995年 与挪威的Metis公司签订了第一份基于Qt 的软件开发合同。 1996年 在Matthias Ettrich(马蒂亚斯)的带领下 KDE项目创立。 之后一年,Matthias决定用Qt开发KDE, 使得Qt成为Linux环境下开发C++图形用户 界面的事实标准。
布局: QLayout,QBoxLayout,QFormLayout, QGridLayout,QStackedLayout 组件: Qwidget及其派生类 进程与线程: QProcess,QThread 多媒体: QtMultimedia,Phonon 绘图: Paint System 网络编程: QtNetwork 表格: Model/View结构 浏览器: QWebKit 数据库: QtSql 具体如何使用可以参考Qt的自带文档,包含大量 的实例。
编译器
Windows:MSVC Linux/X11:GCC Mac OS X:Clang
图1
起源与发展
基本技术
面向对象 信号与槽
事件系统
常用类库
面向对象
Qt是C++的扩展 Qt与C++不同的特征是用C++开发出来的。 QtCore和QtGui QtCore和QtGui是Qt的两个核心组成模 块,每个模块分别包含大量的Qt类。 QtCore包含的类实现了Qt的非图形用户 界面(non-GUI)功能,所有其他的Qt模块都 依赖于此模块。 QtGui在QtCore的基础上实现了Qt的图 形用户界面功能,定义了所有图形用户界面 (GUI)类。
基本技术
信号与槽(signal-slot)
标准Qt对象 图2是一个最简单的Qt类。 要支持信号和槽,任意自定义类要继承 QObject类,并在类定义体内声明Q_Object宏。 元对象系统通过QObject和Q_OBJECT宏实 现信号和槽:
图2
基本技术
信号与槽(signal-slot)
起源与发展
大事记
KDE与Matthias Ettrich
KDE,(K Desktopபைடு நூலகம்Enviroment)
K桌面环境的缩写。它是一个运行于 Linux、Unix 以及FreeBSD 等操作系统 上的桌面图形界面系统。整个系统都是 采用奇趣公司的 Qt 程序库开发的。项 目的发起人是马蒂亚斯· 埃特里希。
基本技术
信号与槽(signal-slot)
如何使用 信号与槽的使用非常简单和灵活。 以图3为例, Object1、Object2、Object3和 Object4是QObject的派生类对象,实线表示信 号-槽的连接。
图3
基本技术
信号与槽(signal-slot)
如何使用 将Object3的signal1信号和Object4的slot3槽 函数连接 信号signal1是一个函数声明,例如 void signal1(/*参数*/) 槽slot3是Object4的一个成员函数,例如 void slot3(/*参数*/) 信号signal1的发送会触发槽slot3的执行 emit signal1(/*参数*/)
基本技术
事件系统
事件发送 postEvent [异步]
将事件对象放入事件消息队列尾部排队,然后 立即返回。事件是按照其发送到消息队列的顺序 依次处理。事件在堆分配。 sendEvent [同步] 用notify函数将事件直接发送给接收者处理,返 回receiver->event()的返回值。receiver==NULL, 广播事件。
基本技术
事件系统
事件发送 sendPostedEvents
将事件队列中用postEvent提交的发送给receiver 的event_type类型的事件立即发送给receiver处理。 但是来自窗口系统的事件不被分发,它们被函数 processEvents分发。
立即分发事件队列中的所有事件,即清空事件队 列。
Q_OBJECT宏和QObject继承 Q_OBJECT宏声明了每个QObject子类必需 的内省函数,如metaObject()、qt_metaCall(), 以及其他一些函数。 Qt的元系统编译器编译自动生成Q_OBJECT 声明的函数和信号的实现 QObject成员函数,如connect()、 disconnect()使用这些内省函数完成信号和槽的 工作。 上述过程由元系统编译器和QObject自动处理, 程序员不需要考虑。
起源与发展
起源
创始人 Qt最初是由Haavard Nord(哈瓦德,奇趣 CEO)和Eirik Chambe-Eng(埃里克,奇趣总 裁)开发的。 他们都在挪威科技学院获得计算机硕士 学位。 Qt框架首度为公众可用是在1995年5月。 1995年,与挪威的Metis公司签订了第一份 基于Qt的软件开发合同。
起源与发展
起源
Haavard Nord Eirik Chambe-Eng
起源与发展
大事记
1990年 Haavard和Eirik因为一个超声波图像方面 的C++数据库系统而聚在一起工作。 这个系统需要一个能在Unix,Macintosh 和Windows上都能运行的图形用户界面。 1991年 他们合作设计编写了之后成为Qt的那些 类。在随后一年,Eirik提出了信号-槽机制。 1993年 开发了Qt的第一个图形内核程序,并用 它们实现了一些窗口部件。
基本技术
事件系统
事件发送 notify
notify是事件系统的最基本函数,所有的事件发送 最终都要调用这个函数。它把事件event发送给接 收者,并返回receiver->event()的返回值。
基本技术
事件系统
事件处理 Qt提供了5个级别来处理和过滤事件 级别5:重新实现特定的事件处理器 mousePressEvent(),keyPressEvent(), paintEvent(),customEvent(), 级别4:重新实现QObject::event() 必须调用基类的event()来处理不需要显示处理 的事件 级别3:给被监视对象注册一个事件滤波器 发送到monitoredObj的所有事件都会先被 filterObj的eventFilter()接收处理
基本技术
面向对象
Qt独有的特性: 对象间无缝通信机制:信号和槽技术 (signal-slot) 强大的事件和事件滤波器(events and event filters) 可查询和设计的对象属性(object properties) 层次化的可查询对象树(object trees) 间隔驱动的定时器(interval driven timers) 智能指针(QPointers) 国际化 (internatioanlization)
起源与发展
Matthias Ettrich
大事记
2008年 Nokia从Trolltech公司收购Qt。 2011年 Digia(芬兰IT服务公司)从Nokia收购了Qt 的商业版权。Nokia负责的Qt-on-Mobile和 Qt Commercial由Digia接手。 2012年 Nokia宣布将Qt软件业务出售给Digia。
基本技术
事件系统
事件处理 级别2:将被监视对象的事件滤波器注册到 QApplication对象上。 任意Qt应用程序有且仅有唯一的QApplication 对象,qApp是指向这个对象的全局指针。 级别1:派生类Qapplication并重新实现 notify()
事件
1
2
3
4
5
基本技术
常用类库
一个信号可以连接任意对象的任意个槽函数, 一个槽函数也可以被任意多个信号连接。槽的 参数个数不大于信号的参数个数。
图3
基本技术
事件系统
事件 Qt中,事件代表应用程序里发生的事情或应 用程序需要知道的由于外部活动生成的事情。 任意事件是QEvent类或它的派生类的对象, 它们能被QObject或派生类对象接收和处理。 事件类型 Qt有两种事件类型:Qt库类事件和自定义事 件 Qt库类事件:QMouseEvent,各种鼠标事件。 Qevent派生类事件:Qevent::Type属性
C++ Qt GUI编程基础
戴洪均 2013-5-30
主要内容
起源与发展
基本技术
参考文献
起源与发展
大事记
版本与授权
开发平台与编译器
起源
简介 Qt是挪威Trolltech(奇趣科技)公司开发的 跨平台C++图形用户界面应用程序开发工具。 宗旨 它的设计目标是:“一次编写,随处编 译”。只需要编写一次代码,就可以在不同 的系统平台上编译并生成图形用户界面应用 程序。
相关文档
最新文档