您的位置:首页 > 编程语言 > Qt开发

QT笔记整理

2015-03-20 09:04 141 查看
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:\Qt\Qt5.3.2\Tools\QtCreator\bin

注释 右击|Toggle Comment Selection

缩进 右击|Auto-indent Selection

QtDesigner是一个独立的Qt桌面程序,输出为ui文件

QtAssistant

QtLinguist

Qt助手:

C:\Qt\Qt5.3.2\5.3\msvc2010_opengl\bin\assistant.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*<T>,Q*Iterator<T>,QMutable*Iterator<T> 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自动取消所有连接到这个对象上面的槽。

为了正确的连接信号槽,信号和槽的参数个数、类型以及出现的顺序都必须相同。

这里有一种例外情况,如果信号的参数多于槽的参数,那么这个参数之后的那些参数都会被忽略掉。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: