sonar 3015
sonar 2081
宽带远场方位历程显示模块
PC1:硬定时程序TmCntSet
PC2:文件推送程序fileserver
PC3:DSP接收程序
PC4:HY_OceanDisplay
QTNokia内部培训资料.pdf
精通Qt4编程
http://qt.nokia.com访问不了?
http://qt-project.org/
QT是一个跨平台的GUI框架或C++应用程序开发框架。
Nokia于2008年收购了Trolltech公司。
QT在所有平台提供native look-and-feel。
实现是依赖于具体平台的APIs。
平台相关的特性是独立的。
Qt目前移植到了如下7个平台:
桌面系统:Windows、Linux(x11)、Mac
MTs:Embedded Linux、Windows CE、Meego、Symbian
Qt APIs是基于OpenC/Symbian APIs的。
目标是使Qt的程序能在Symbian平台上正确的运行。
2010年4月,Nokia提供了Qt SDK,包括了所有Qt相关的开发工具,包括:
Qt for Symbian and Meego(4.7)
QtMobility APIs
Qt Creator IDE 2.0
Qt Simulator
ODD for all devices
3个模块依赖于具体的平台:
QAxContainer——Windows平台,定义了访问ActiveX控件和COM对象的扩展
QAxServer——Windows平台,将一个标准的Qt二进制代码转化为COMServer
QtDBus——UNIX平台,使用D_Bus进行IPC
所有的模块都依赖于QtCore
QtGui
QtNetwork
QtOpenGL
QtSql
QtSvg
QtXml
QtDesigner
QtUiTools
QtAssitant
Qt3Support
QtTest
QtScript
QThread
QMutex不允许并发读取 lock、unlock、trylock
QMutexLocker可以简化互斥量的处理
QSemaphore
QReadWriteLocker允许并发读取 读写锁
QReadLocker
QWriteLocker
编译工具:
Configure根据当前开发的平台配置Qt自身的环境
Qmake创建Qt工程文件(pro)
Qmake工具定义了5种模板:应用程序app、库lib、子工程subdirs、VC应用程序vcapp、VC库vclib
Moc元对象(Meta-Object)编译器
Uic UI编译器,把ui文件转换成h文件
Rcc资源编译器,Qt资源文件(qrc)
开发工具:
QtCreator,C:QtQt5.3.2ToolsQtCreatorin
注释 右击|Toggle Comment Selection
缩进 右击|Auto-indent Selection
QtDesigner是一个独立的Qt桌面程序,输出为ui文件
QtAssistant
QtLinguist
Qt助手:
C:QtQt5.3.25.3msvc2010_openglinassistant.exe
Qt的主事件循环QApplication::execl
事件基类QEvent
子类有QMouseEvent、QKeyEvent、QTimeEvent
组合和布局控件
水平布局管理器QHBoxLayout、垂直布局管理器QVBoxLayout、网格布局管理器QGridLayout、QFormLayout、QTabBar、QGroupBox、QSpacerItem
通常使用布局管理器而不是硬编码来控制控件的位置
addWidget将标签、按钮放置在该管理器中
setLayout将布局管理器添加到窗口部件对象
QtGUI:
QTextCodec
显示控件:QLabel、QTextBrowser、QLCDNumber、QProgressBar
输入和选择控件:QPushButton、QRadioButton、QCheckBox、行编辑框QLineEdit、QPalinTextEdit、QSpinBox、QDial、QScrollBar、QSlider
UI对象基类QWidget<—QFrame<—QLabel
Qt Creator 3.2.1(opensource) Based on Qt 5.3.2(MSVC 2010,32 bit)
Qt Widgets Application
Qt Quick Application QML & C++
Qt控制台应用
Qt QuickUI
QObject<—QCoreApplication<—QGuiApplication<—Qt的应用程序类QApplication
使用Qt设计的任何GUI应用程序,必须包含一个QApplication对象。
对于非GUI的Qt应用程序,可使用不依赖于、QtGui库的QCoreApplication
每一个没有父亲的控件会变成一个窗口
父子关系
内存管理: 所有子对象的内存管理都转移给了父对象,没有从Object继承的对象则分配在栈上,而不是堆上。
例外:
QFile、QApplication、模式对话框通常分配在栈上。
Qt中,QDialog.exec以模态方式显示对话框(栈对象)
QDialog.show以非模态方式显示对话框(堆对象)
对话框窗口的基类QDialog—>基础窗口部件QWidget
Signal & Slot
一个信号和一个槽关联
一个信号和多个槽关联
多个信号和一个槽关联
Qt支持以下三种信号和槽的连接方式
直接连接方式
排队连接方式
自动连接方式(QT的默认连接方式)
Qt提供了信号和槽机制来完成界面操作的响应
QObject::connect
QObject::sender返回发送信号的对象的指针
Qt元对象系统
Q_OBJECT宏的作用是启动Qt元对象系统的一些特性(比如支持信号和槽等),它必须放置到类定义的私有区。
QObject::metaObject返回一个类的元对象
QMetaObject::className在运行时以字符串的形式返回类名
QObject::inherits判断一个对象是否是某个指定类的子类实例
http://www.docin.com/p-696501905.html
什么是Qt5?
Qt5是Qt的最新版本。对Qt4做了重大的革新。
全新的基于OpenGL ES2的SceneGraph图形引擎,全面提升QtQuick的界面性能到新的层次
采用全新的QPA作为支持操作系统的统一框架
全面支持最新的C++11特征
99%兼容Qt4应用程序
2012年12月19日,发布Qt5.0
2013年1月31日,发布Qt5.0.1
2013年4月8日,发布Qt5.1 Alpha
2013年4月10日,发布Qt5.0.2
2013年5月14日,发布Qt5.1 Beta
Qt5中的所有模块被划分为两种模块:
Qt Esstential模块和Qt add-on模块
Qt Esstential模块对于所有的平台均一致,构成了Qt5的基本框架。
Qt add-on模块提供了扩展功能或者是平台特定功能。
模块自己的版本会保持兼容
部分Qt4的旧功能模块,例如Qt Quick1和Qt OpenGL
对客户和开发有意义的往往是Qt add-on模块
Essential模块
Qt Core
Qt Network
Qt Gui
Qt Widgets
Qt Sql
Qt Qml
Qt Quick
Qt Multimedia
Qt Webkit
Qt Webkit Widgets
Add-on模块
Qt Charts(Enterprise licensees only)
Qt Concurrent
Qt Print Support
Qt DBus
Qt Testlib
Qt Xml Patterns
Qt ActiveQt
Qt Help
Qt Graphical Effects
Qt Declarative(Quick1)
Qt Image Formats
Qt OpenGL
Qt Xml
Qt Svg
Qt Script & Script Tools
移除的模块/功能
Qt3Support
Symbian/Maemo
QWS
QtOpenVg
MSVC6和GCC3.x编译器的支持
QT_NO_STL选项
Qt5的新特性
全新设计的图形渲染引擎SceneGraph
全新设计的快速开发方法QtQucik2和QML2
全新设计的Qt底层平台架构QPA
NOKIA QT培训资料(中文版)
http://wenku.baidu.com/link?url=WeLb5kFFlWXmsi3jRY8D3cd7wh0QmSQokueslk4Pi1BcSre69TUP6D7gD9OVNNrBP3kBAh6QJJtGpPVWrtgtQE1ha0ES_7ui8rT4YE8Ukyi
Qt的对象模型和信号槽的概念
QObject类是几乎所有Qt类和所有部件widget的基类。
它包含很多组成Qt的机制
事件
信号和槽
属性
内存管理
例外的例子是:
类需要作为轻量级的类,例如图元。
数据容器QString、QList、QChar等。
需要可复制的类,因为QObject类是无法被复制的。
元数据(Meta data)
Qt用C++实现内省
每一个QObject都有一个元对象
元对象涉及:
类名QObject::className
继承QObject::inherits
属性
信号和槽
普通信息QObject::classInfo
元数据通过元对象编译器moc在编译时组合在一起。
普通的C++生成过程:
头文件—includes—>源文件—compiles—>目标文件—links—>可执行文件
Qt C++生成过程
moc从头文件里面获得数据
moc找什么 ?
首先确认该类继承自QObject(可能是间接)
Q_OBJECT宏,通常是第一步
类的一般信息
Q_CLASSINFO(“author”,”John Doe”)
Qt关键字
public slots:
signals:
内省Introspection
类在运行时了解它们自己的信息
能够实现动态转换而不需要运行时类型检查RTTI
元对象了解细节
对实现脚本和动态语言的绑定有很好的支持。
内存管理
QObject可以有父对象和自对象
当一个父对象被删除,它的子对象也同样被删除。
当需要实现视觉层级时使用到它。
QObject可以修改它所属的父对象
槽在各种槽端中定义
槽可以返回值,但并不是通过联结。
信号在信号段中定义
信号总是返回空
信号总是不必实现,由moc来提供实现
信号使用emit关键字发射出去。
建立关联
QObject::connect
签名由函数名和参数类型组成。不允许有变量名或值。
自定义类型降低了可重用性
Qt参数可以忽略,但不能无中生有
信号映射器QSignalMapper
关联按钮到映射器
关联一个发射器和一个值
关联映射器到槽上
QT网络编程简介
http://www.docin.com/p-688633966.html
QIODevice
QAbstractSocket,QFile,QBuffer
QUdpSocket,QTcpSocket,QTcpServer,QHostAddress
QIODevice是一个抽象类
QAbstractSocket是一个抽象类,为socket提供了公共的接口QTcpSocket继承自QAbstractSocket,没有增加接口
QUdpSocket继承自QAbstractSocket,增加了以下UDP特有的接口
QTcpServer提供了TCP监听socket功能
QT_Nokia内部培训资料
http://wenku.baidu.com/link?
url=WceyHju4d8BssL2DMcvHnxallDr1LLpSXeh6I82lHKA4hmFYcLeJeuJmY6w953lbWmfIVGvxpfLkExv6ZmHl6nCSGZcoB0ZDcgVCtBMMwby
基本工程结构
工程文件
头文件
源文件
资源文件
UI设计文件
QObject作用
Qt对象模型的核心
是绝大多数类的基类
所有的QWidgets都是QObject
提供对象树和对象的关系
提供了信号-槽的通信机制
具有三个作用:
内存管理
内省
事件处理
http://www.docin.com/p-693146999.html
第3章 QT的模板库、工具类及控件
字符串类QString
操作符+,+=
append
sprintf
arg
startsWith
contains
toInt
toDouble
toFloat
toLong
toLongLong
Qt容器类
经常使用的Qt容器类有Qlist、QlinkedList和QVector等。
在开发一个较高性能需求的应用程序时,程序员会比较关注这些容器类的运行效率。
表3.1列出了QList、QLinkedList和QVector容器的时间复杂度。
查找:Qlist=Qvector快于QlinkList
插入:QlinkList快于Qlist=Qvector
头部添加:QlinkList、 QList快于QVector
尾部添加:QlinkList快于Qlist=Qvector
QList类
追加append和prepend函数
中间插入insert
QLinkedList类
是一个链式列表,它以非连续的内存块保存数据。
不能够使用下标,只能够使用迭代器访问它的数据项。
与QList相比,当对一个很大的列表进行插入操作时,QLinkedList具有更高的效率。
QVector类
在相邻的内存中存储给定数据类型T的一组数值。在一个QVector的前部或者中间位置进行插入操作的速度是很慢的,这是由QVector存储数据的方式决定的。
Java风格迭代器遍历容器
Java风格的迭代器是Qt4新加入的一个功能。
对于每一个容器类,Qt都提供了两种类型的Java风格迭代器数据类型,即只读访问和读写访问。
容器类,只读迭代器类,读写迭代器类
Q*,Q*Iterator,QMutable*Iterator
http://www.docin.com/p-84528025.html
Qt学习之路
Qt有两套协议——商业版本和开源的LGPL版本。前者要收费,而后者免费。
Qt Creator就是官方提供的一个轻量级IDE。
Qt中头文件和类名是一致的。
大多数Qt程序使用QMainWindow或者QDialog作为顶级组件,但Qt并不强制要求这一点。例如可以是QLabel。
Qt的编译不能使用普通的make,而必须先使用qmake进行预编译。
Qt也是支持HTML解析的。
Qt使用信号槽机制完成了事件监听操作。
Qt把SIGNAL和SLOT当成了关键字。Qt正是利用它们扩展了C++语言,因此才需要使用qmake进行预处理。
Qt的组件定位技术包括绝对定位和布局定位。
Qt一共有三种主要的layout,分别是:
QHBoxLayout按照水平方向从左到右布局
QVBoxLayout按照竖直方向从上到下布局
QGridLayout在一个网格中进行布局,类似于HTML的table
Layout使用addWidget添加组件,使用addLayout可以添加子布局,因此,这就有了无穷无尽的组合方式。
凡是定义信号槽的类都必须声明Q_OBJECT宏
一个信号可以和多个槽相连,这些槽会一个接一个的被调用,但是它们的调用顺序是不确定的。
多个信号可以连接到一个槽,只要任意一个信号发出,这个槽就会被调用。
一个信号可以连接到另外的一个信号,当第一个信号发出时,第二个信号被发出。除此之外,这种信号-信号的形式和信号-槽的形式没有什么区别。
槽可以被取消链接。
当一个对象delete之后,Qt自动取消所有连接到这个对象上面的槽。
为了正确的连接信号槽,信号和槽的参数个数、类型以及出现的顺序都必须相同。
这里有一种例外情况,如果信号的参数多于槽的参数,那么这个参数之后的那些参数都会被忽略掉。