[QT]QT概述
QT概述
基于C++的GUI开发框架,跨平台。Qt 是一个用于桌面系统和嵌入式开发的跨平台应用程序框架。
QT是挪威TROLLTECH公司开发的跨平台C++工具,在UNIX下非常出名;他的宗旨是“一次编码到处编译”与JAVA的“一次编译到处运行”有着本质的区别,作为跨平台开发工具,他的运行速度非常的快(因为他不需要虚拟机的支持),开发的GUI非常漂亮(有人认为比VISUAL C++强的多,而且简单)。
QT技术特点
- 面向对象:Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt 提供了一种称为signals/slots 的安全类型来替代 callback,这使得各个元件之间的协同工作变得十分简单。
- 丰富的组件和API:Qt 包括多达250个以上的C++类,还替供基于模板的collections, serialization,file,I/O device,directory management, date/time 类。甚至还包括正则表达式的处理功能。
- 支持 2D/3D 图形渲染,支持 OpenGL
- 对象的通信机制,信号-槽
- 方便的事件处理模型
- 夸平台的GUI应用程序的支持
- XML 支持,数据库,网络编程,开发工具包,大量的开发文档
Qt相对于C++增加的特性有
- 能够强有力地支持对象间通信的信号与槽机制
- 支持可查询和可设计的动态对象属性机制
- 事件和事件过滤器
- 基于上下文的字符串本地化
- 能够支持多任务的定时器
- 支持按层次检索的对象树
- 受保护指针
- 动态类型转换
开发工具包
- 图形设计器:Qt Designer
- 编译工具:qmake
- 本地化工具:Qt Linguist
- 帮助文档:Qt Assistant
- 元对象编译器:moc
- 用户接口编译器:uic
- 资源编译器:rcc
QT模块介绍-----头文件
Qt 5 与 Qt 4 最大的一个区别之一是底层架构有了修改。Qt 5 引入了模块化的概念,将众多功能细分到几个模块之中。Qt 4 也有模块的概念,但是是一种很粗的划分,而 Qt 5 则更加细化。本节主要对 Qt 5 的模块进行一个简单的介绍,以便以后大家需要哪些功能的时候知道到哪个模块去寻找。
Qt 5 模块分为 Essentials Modules 和 Add-on Modules 两部分。前者是基础模块,在所有平台上都可用;后者是扩展模块,建立在基础模块的基础之上,在能够运行 Qt 的平台之上可以酌情引入。
Qt 基础模块分为以下几个:
- Qt Core,提供核心的非 GUI 功能,所有模块都需要这个模块。这个模块的类包括了动画框架、定时器、各个容器类、时间日期类、事件、IO、JSON、插件机制、智能指针、图形(矩形、路径等)、线程、XML 等。所有这些类都可以通过 <QtCore> 头文件引入。
- Qt Gui,提供 GUI 程序的基本功能,包括与窗口系统的集成、事件处理、OpenGL 和 OpenGL ES 集成、2D 图像、字体、拖放等。这些类一般由 Qt 用户界面类内部使用,当然也可以用于访问底层的 OpenGL ES 图像 API。Qt Gui 模块提供的是所有图形用户界面程序都需要的通用功能。
- Qt Multimedia,提供视频、音频、收音机以及摄像头等功能。这些类可以通过 <QtMultimedia> 引入,而且需要在 pro 文件中添加 QT += multimedia。
- Qt Network,提供跨平台的网络功能。这些类可以通过 <QtNetwork> 引入,而且需要在 pro 文件中添加 QT += network。
- Qt Qml,提供供 QML(一种脚本语言,也提供 JavaScript 的交互机制) 使用的 C++ API。这些类可以通过 <QtQml> 引入,而且需要在 pro 文件中添加 QT += qml。
- Qt Quick,允许在 Qt/C++ 程序中嵌入 Qt Quick(一种基于 Qt 的高度动画的用户界面,适合于移动平台开发)。这些类可以通过 <QtQuick> 引入,而且需要在 pro 文件中添加 QT += quick。
- Qt SQL,允许使用 SQL 访问数据库。这些类可以通过 <QtSql> 引入,而且需要在 pro 文件中添加 QT += sql。
- Qt Test,提供 Qt 程序的单元测试功能。这些类可以通过 <QtTest> 引入,而且需要在 pro 文件中添加 QT += testlib。
- Qt Webkit,基于 WebKit2 的实现以及一套全新的 QML API(顺便说一下,Qt 4.8 附带的是 QtWebkit 2.2)。
Qt 扩展模块则有更多的选择:
- Qt 3D,提供声明式语法,在 Qt 程序中可以简单地嵌入 3D 图像。Qt 3D 为 Qt Quick 添加了 3D 内容渲染。Qt 3D 提供了 QML 和 C++ 两套 API,用于开发 3D 程序。
- Qt Bluetooth,提供用于访问蓝牙无线设备的 C++ 和 QML API。
- Qt Contacts,用于访问地址簿或者联系人数据库的 C++ 和 QML API。
- Qt Concurrent,封装了底层线程技术的类库,方便开发多线程程序。
- Qt D-Bus,这是一个仅供 Unix 平台使用的类库,用于利用 D-Bus 协议进行进程间交互。
- Qt Graphical Effects,提供一系列用于实现图像特效的类,比如模糊、锐化等。
- Qt Image Formats,支持图片格式的一系列插件,包括 TIFF、MNG、TGA 和 WBMP。
- Qt JS Backend,该模块没有公开的 API,是 V8 JavaScript 引擎的一个移植。这个模块仅供 QtQml 模块内部使用。
- Qt Location,提供定位机制、地图和导航技术、位置搜索等功能的 QML 和 C++ API。
- Qt OpenGL,方便在 Qt 应用程序中使用 OpenGL。该模块仅仅为了程序从 Qt 4 移植到 Qt 5 的方便才保留下来,如果你需要在新的 Qt 5 程序中使用 OpenGL 相关技术,需要使用的是 QtGui 模块中的 QOpenGL。
- Qt Organizer,使用 QML 和 C++ API 访问组织事件(organizer event)。organizer API 是 Personal Information Management API 的一部分,用于访问 Calendar 信息。通过 Organizer API 可以实现:从日历数据库访问日历时间、导入 iCalendar 事件或者将自己的事件导出到 iCalendar。
- Qt Print Support,提供对打印功能的支持。
- Qt Publish and Subscribe,为应用程序提供对项目值的读取、导航、订阅等的功能。
- Qt Quick 1,从 Qt 4 移植过来的 QtDeclarative 模块,用于提供与 Qt 4 的兼容。如果你需要开发新的程序,需要使用 QtQuick 模块。
- Qt Script,提供脚本化机制。这也是为提供与 Qt 4 的兼容性,如果要使用脚本化支持,请使用 QtQml 模块的 QJS* 类。
- Qt Script Tools,为使用了 Qt Script 模块的应用程序提供的额外的组件。
- Qt Sensors,提供访问各类传感器的 QML 和 C++ 接口。
- Qt Service Framework,提供客户端发现其他设备的服务。Qt Service Framework 为在不同平台上发现、实现和访问服务定义了一套统一的机制。
- Qt SVG,提供渲染和创建 SVG 文件的功能。
- Qt System Info,提供一套 API,用于发现系统相关的信息,比如电池使用量、锁屏、硬件特性等。
- Qt Tools,提供了 Qt 开发的方便工具,包括 Qt CLucene、Qt Designer、Qt Help 以及 Qt UI Tools 。
- Qt Versit,提供了对 Versit API 的支持。Versit API 是 Personal Information Management API 的一部分,用于 QContacts 和 vCard 以及 QOrganizerItems 和 iCalendar 之间的相互转换。
- Qt Wayland,仅用于 Linux 平台,用于替代 QWS,包括 Qt Compositor API(server)和 Wayland 平台插件(clients)。
- Qt WebKit,从 Qt 4 移植来的基于 WebKit1 和 QWidget 的 API。
- Qt Widgets,使用 C++ 扩展的 Qt Gui 模块,提供了一些界面组件,比如按钮、单选框等。
- Qt XML,SAX 和 DOM 的 C++ 实现。该模块已经废除,请使用 QXmlStreamReader/Writer。
- Qt XML Patterns,提供对 XPath、XQuery、XSLT 和 XML Schema 验证的支持。
这里需要强调一点,由于 Qt 的扩展模块并不是 Qt 必须安装的部分,因此 Qt 在未来版本中可能会提供更多的扩展模块,这里给出的也仅仅是一些现在确定会包含在 Qt 5 中的一部分,另外还有一些,比如 Qt Active、Qt QA 等,则可能会在 beta 及以后版本中出现。
Qt 4 也分成若干模块,但是这些模块与 Qt 5 有些许多不同。下面是 Qt 4 的模块:
- QtCore,Qt 提供的非 GUI 核心类库,这一部分与 Qt 5 大致相同,只不过 Qt 4 的 core 类库中并不包含 JSON、XML 处理等。
- QtGui,图形用户界面组件,这个模块相当于 Qt 5 的 QtGui 与 QtWidgets 两个模块的总和。
- QtMultimedia,多媒体支持,类似 Qt 5 的相关部分。
- QtNetwork,网络支持,类似 Qt 5。
- QtOpenGL,提供对 OpenGL 的支持。在 Qt 5 中,这部分被移植到 QtGui 模块。
- QtOpenVG,提供对 OpenVG 的支持。
- QtScript,提供对 Qt Scripts 的支持。Qt Script 是一种类似于 JavaScript 的脚本语言。在 Qt 5 中,推荐使用 QtQml 的 JavaScript 部分。
- QtScriptTools,为 Qt Script 提供的额外组件。
- QtSql,提供对 SQL 数据库的支持。
- QtSvg,提供对 SVG 文件的支持。
- QtWebKit,提供显示和编辑 Web 内容。
- QtXml,XML 处理,这部分在 Qt 5 中被添加到了 QtCore。
- QtXmlPatterns,提供对 XQuery、XPath 等的支持。
- QtDeclarative,用于编写动画形式的图形用户界面的引擎。
- Phonon,多媒体框架。
- Qt3Support,Qt 3 兼容类库。
- QtDesigner,用于扩展 Qt Designer。
- QtUiTools,用于在自己的引用程序中处理 Qt Designer 生成的 form 文件。
- QtHelp,联机帮助。
- QtTest,单元测试。
- QAxContainer,用于访问 ActiveX 控件。//专门供 Windows 平台的模块
- QAxServer,用于编写 ActiveX 服务器。//专门供 Windows 平台的模块
- QtDBus,使用 D-Bus 提供进程间交互。//专门供 Unix 平台的模块
QT——关键概念
信号和槽
信号和槽原理:对象之间的通信机制,是QT对C++的扩展,组件中QT预定义的槽和信号
如:QPushButton中预定义信号
lvoid clicked ( bool checked = false )
lvoid pressed ()
lvoid released ()
lvoid toggled ( bool checked )
QPushButton中预定义槽:void setChecked ( bool )
元对象系统 (meta-object system)
信号-槽(signal-slot)
内省(introspection)
工作机制
Q_OBJECT宏声明了在每一个QObject子类中必须实现的一些内省函数:metaObject()、tr()、qt_metacall()……
Qt的moc工具生成了用于由Q_OBJECT声明的所有函数和所有信号的实现。
像connect()和disconnect()这样的QObject的成员函数使用这些内省函数来完成它们的工作。
- QObject::metaObject() 能够返回与类相关的元对象。
- nQMetaObject::classNmae() 能够在不需要实时类型信息(Run-Time Type Information, RTTI)支持的情况下实时返回字符串类型的类名。适合调试。
- nQObject::inherits() 能够判断一个类是否继承于另一个类。
- nQObject::tr()和QObject::trUtf8()能够为本地化提供字符串翻译。
- nQObject::setProperty()和QObject::property() 能够根据名字动态地设置或获取属性。
- nQObject::qobject_cast() 能够支持动态类型转换。
[QT]QT概述的更多相关文章
- Qt... configure: error: Qt (>= Qt 2.2.2) (headers…
转载:http://blog.chinaunix.net/uid-23733724-id-290980.html 昨天开始在自己的fedora12下装qt~ 但是按照教程在/opt/Embed ...
- Qt, QT/E, Qtopia 的区别
转自Qt, QT/E, Qtopia 的区别 Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等.由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Q ...
- QT QT creator QTsdk的区别
Qt是一个跨平台的C++图形用户界面应用程序框架.它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程. QT Creator 跨平台 ...
- QT,QT SDK, QT Creator 区别
Qt是一个跨平台的C++图形用户界面应用程序框架.(不仅仅是C++,还包括QML,Qquick,html5)它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt是完全面向对象的,很容易扩 ...
- [QT]Qt+VS2012+Win8 64Bit安装
学习Qt鸟,当年没听@Coding_Peon(http://weibo.com/u/1764451551?topnav=1&wvr=5&topsug=1)话好好学习QT和Python之 ...
- QT+QT creator+OpenCV图像灰度化
1).pro文件 #------------------------------------------------- # # Project created by QtCreator 2014-05 ...
- QT | QT MSVC 2015 + VS 2015开发环境配置及GIT设置
1.下载: 所有Qt版本的下载地址: http://download.qt.io/archive/qt/ 实际使用了http://download.qt.io/archive/qt/5.7/5.7.1 ...
- Qt.Qt新安装之后出现Error while building/deploying (kit: Desktop Qt 5.7.0 GCC 64bit) When executing step "Make”
出问题的环境: 操作系统: Ubuntu18.04 安装包: qt-opensource-linux-x64-5.8.0.run 现象: 新建一个Hello World项目, 试着运行, 出现以下提示 ...
- qt——QT中QWidget、QDialog及QMainWindow的区别
QWidget类是所有用户界面对象的基类. 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标.键盘和其它事件,并且在屏幕上绘制自己.每一个窗口部件都是矩形的,并且它们按Z轴顺序排列.一个窗口部件 ...
随机推荐
- MySQL 聚簇索引
聚簇索引并不是一种单独的索引类型,而是一种数据存储方式.具体的细节依赖于其实现方式,但innoddb 的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行. 当表有聚簇索引时,它的数据实际上存 ...
- jQuery自学笔记(三):jQuery动画效果
jQuery隐藏和显示: 使用 hide( ) 和 show( ) 方法来隐藏和显示 HTML 元素: 语法: $(selector).hide(speed,callback); $(selector ...
- JavaScript 高级程序设计 第5章引用类型 笔记
第五章 引用类型 一.object类型 1.创建方法: 1.使用new 操作符创建 var person=new object() Person.name=”Nicholasa” Porson.age ...
- 一步步教你css3手风琴效果的实现
什么是手风琴效果? 首先我们先来看一段动画,如下图所示: 在上面动画中,我们不难发现,一排照片正常排列,当我鼠标移上(:hover)时,照片会变大显示并且把其它照片挤小.那么在鼠标来回移动的过程中,画 ...
- lazy loading img 图片延迟加载
http://yunpan.cn/cVsjPW6dgbcsh (提取码:b5db)
- F#(1)
如果你也会C#,那不妨了解下F#(1):F# 数据类型 简单介绍 F#(与C#一样,念作“F Sharp”)是一种基于.Net框架的强类型.静态类型的函数式编程语言.可以说C#是一门包含函数式编程 ...
- OC高级编程——深入block,如何捕获变量,如何存储在堆上
OC高级编程——深入block,如何捕获变量,如何存储在堆上 首先先看几道block相关的题目 这是一篇比较长的 博文 ,前部分是block的测试题目,中间是block的语法.特性,block讲 ...
- Windows进程间通信的各种方法
原文:Windows进程间通信的各种方法 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码.数据以及它可利用的系统资源(如文件.管道等)组成.多进程/多线程是Windows操作系 ...
- intel安装mac os
一.变色龙: 1.http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1518901&extra=page%3D1%26orderby ...
- Android 对话框简介
对话框(Dialog)是程序运行过程中弹出的窗口,Android中有好多种对话框,如警告对话框,进度对话框,列表对话框,单选对话框,日期选择对话框,时间选择对话框等: 下面用几个例子来演示一下各种对话 ...