说明:
下面的XX.XX.XX为Qt的版本号,如:5.14.1。
下面总结的都是以Qt的5.14.1版本来说明的,未来的版本也许和这有些不同。
因为Qt自带的例子很多,本博文是第4部分,第1、2、3、5、6部分请参见如下链接:
- 《Qt Example各例子技术点说明(一)》。
- 《Qt Example各例子技术点说明(二)》。
- 《Qt Example各例子技术点说明(三)》。
- 《Qt Example各例子技术点说明(五)》。
- 《Qt Example各例子技术点说明(六)》。
1.imagegestures
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\widgets\gestures\imagegestures
本工程展示利用Qt触摸手势技术实现对图片集前翻、后翻、旋转、缩放。通过本工程,需要掌握如下知识点:
- 手势相关QGestureEvent、QPanGesture、QPinchGesture类的用法 。
- 掌握QImageReader操作图片的用法。
- 了解QLoggingCategory类如何管理打印日志功能,具体参见:
2.network
本大节展示如何利用Qt的network模块进行网络编程。存放目录为:
Examples\Qt-XX.XX.XX\network
2.1.bearermonitor
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\bearermonitor
本工程展示如何利用Qt的QNetworkConfiguration、QNetworkConfigurationManager、QNetworkSession类访问、获取本机的网络服务、网络访问接口、网络访问节点、网络会话。通过本工程需要掌握如下知识点:
- Qt的QNetworkConfiguration、QNetworkConfigurationManager类访问、获取本机的网络服务、网络访问接口、网络访问节点。
- QNetworkConfiguration、QNetworkConfigurationManager类各函数及信号作用及用法。
- QNetworkSession类对网络会话的操作。
2.2.blockingfortuneclient
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\blockingfortuneclient
本工程演示如何通过一个网络客户端连接网络服务器端。通过本工程需要掌握如下知识点:
- 表示主机ip地址信息的QHostAddress类用法。
- 获取主机网卡信息的QNetworkInterface类用法。
- QThread用法及如何子类化QThread。
- 线程同步时用到的QMutexLocker、QWaitCondition、QMutex类的用法。
2.3.broadcastreceiver
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\broadcastreceiver
本工程演示如何通过QUdpSocket接收数据包。通过本工程需要掌握如下知识点:
- QUdpSocket类用法及QAbstractSocket::BindFlag各个枚举值含义。
- 如何通过QUdpSocket接收网络数据包。
2.4.broadcastsender
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\broadcastsender
本工程演示如何通过QUdpSocket发送数据包。通过本工程需要掌握如下知识点:
- QUdpSocket类用法及QHostAddress::SpecialAddress各个枚举值含义,尤其是QHostAddress::Broadcast含义。
- 如何通过QUdpSocket发送网络数据包。
2.5.dnslookup
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\dnslookup
本工程通过命令行输入参数,实现DNS相关信息查询。通过本工程需要掌握如下知识点:
- 掌握QDnsLookup类的使用,如何查询DNS信息。
- DNS查询结果QDnsDomainNameRecord、QDnsHostAddressRecord、QDnsMailExchangeRecord、
- QDnsDomainNameRecord、QDnsServiceRecord、QDnsTextRecord类的使用。
2.6.download
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\download
本工程通过从命令行读取多个URL,将URL指向的文件下载到本地保存,通过本工程需要掌握如下知识点:
- 利用QNetworkAccessManager类发送或接收网络请求。
- 利用QNetworkReply类构建网络回复对象,对收到的网络回复结果(网络数据包)进行管理。
- 利用QNetworkRequest类构建网络请求对象及如何利用QUrl构建QNetworkRequest类对象。
- QUrl类对URL的操作。
2.7.downloadmanager
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\downloadmanager
技术点同2.6
2.8.fortuneclient
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\dfortuneclient
本工程通过QTcpSocket类连接服务器。通过本工程需要掌握如下技术点:
- 通过QHostInfo类查询主机名称和主机绑定的IP地址,掌握QHostInfo类使用。
- 获取主机网卡信息的QNetworkInterface类用法。
- 表示主机IP地址信息的QHostAddress用法。
- QNetworkConfigurationManager、QNetworkSession、QNetworkConfiguration用法。
2.9.fortuneserver
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\fortuneserver
本工程同2.8提到的fortuneclient工程类似,只不过本工程是服务器端,通过本工程需要掌握如下技术点:
- 通过QHostInfo类查询主机名称和主机绑定的IP地址,掌握QHostInfo类使用。
- 获取主机网卡信息的QNetworkInterface类用法。
- 表示主机IP地址信息的QHostAddress用法。
- QNetworkConfigurationManager、QNetworkSession、QNetworkConfiguration用法。
2.10.googlesuggest
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\googlesuggest
本工程实现一个类似Google的搜索下列提示框。当在搜索编辑框输入搜索内容文本时,搜索编辑框下方就出现和编辑框内容近似的搜索提示结果
提示框是通过QTreeWidget控件来实现的。类似QLineEdit的QCompleter。同百度的搜索类似,当在百度搜索时,搜索框下方也会出现很多提示搜索内容。
通过本工程需要掌握如下知识点:
- QNetworkReply、QNetworkRequest、QNetworkAccessManager类使用。
- QDesktopServices类的使用。
- 如何通过QTreeWidget、QLineEdit控件的密切互动,实现搜索下拉提示结果列表。
2.11.http
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\http
本工程通过用户输入http地址表示的文件,从而将该文件下载到本地。通过本工程需要掌握如下技术点:
- QNetworkAccessManager类的使用,尤其是该类的authenticationRequired信号的使用。
- QNetworkRequest、QNetworkReply类使用。尤其需要关注QNetworkReply类的downloadProgress用法。
- QUrl类的使用,尤其需要关注QUrl的fromUserInput、resolved函数用法。
- QAuthenticator类用法。
- QNetworkReply类重定向属性QNetworkRequest::RedirectionTargetAttribute。
- 如何用QProgressDialog类对象来表示下载进度信息。
2.12.loopback
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\loopback
本工程创建两个QTcpServer对象,分别作为服务器和客户端。客户端向服务器端发送报文,服务端将客户端发送的报文读取。通过本工程需要掌握如下技术点:
- QTcpServer类函数和信号的使用,会利用该类创建服务器端和客户端。
- 服务器端和客户端是如何进行监听、连接、数据发送、读取交互的。
2.13.multicastreceiver
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\multicastreceiver
本工程演示利用QUdpSocket类实现多播接收端,该工程需要multicastsender工程一起联动才能看到程序效果。通过本工程,需要掌握如下技术点:
- QUdpSocket类的使用。尤其是利用该类的joinMulticastGroup实现多播组。
- 在IP6先利用QNetworkDatagram类对象接收报文。掌握QNetworkDatagram类的用法。
2.14.multicastsender
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\multicastsender
本工程演示利用QUdpSocket类实现多播发送端,该工程需要multicastreceiver工程一起联动才能看到程序效果。通过本工程,需要掌握如下技术点:
- QUdpSocket类的使用。尤其在IP4下对多播TTL的控制。
- UDP模式下,IP4和IP6发送数据的区别,后者需要判断QUdpSocket类对象的状态为QAbstractSocket::BoundState才能发送数据。
2.15.network-chat
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\network-chat
本工程演示一个有状态的对等聊天客户端。这个例子使用QUdpSocket和QNetworkInterface广播来发现它的对等点,实现网络聊天。对本工程的详细分析参见《Network Chat Example》博文,通过本工程,需要掌握如下技术点:
- 掌握如何通过QNetworkInterface类获取网络适配器(网卡)信息。
- 利用Qt的qEnvironmentVariable、qgetenv函数获取系统环境变量。
- 利用QNetworkAddressEntry类表示IP、掩码地址、广播地址。
- QHostAddress、QTcpSocket、QCborStreamWriter、QCborStreamReader类的使用。
2.16.securesocketclient
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\securesocketclient
本工程演示如何利用QSslSocket类进行安全套接字发送报文(对发送报文加密)。通过本工程需要掌握如下技术点:
- QAbstractSocket::SocketState枚举中的每个枚举值表示的各种套接字状态的深刻理解。
- QSslSocket类的使用。
- QSslCertificate类的使用。
说明:本工程启动时,如果QSslSocket::supportsSsl()返回false,导致程序不能起来,则请参考《QSslSocket::supportsSsl()返回false问题解决》博文。
2.17.secureudpclient
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\secureudpclient
本工程是客户端,需要服务端即secureudpserver一起跑才有效果。通过本工程需要掌握下列技术点:
- QHostInfo、QUdpSocket、QHostAddress、QDtls、QNetworkInterface、QSslSocket、QSslConfiguration类的使用。
- 一些不常用但很实用的小技术点:QComboBox类的insertSeparator方法插入分隔项;QByteArray的toHex转为16进制方法。
2.18.secureudpserver
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\secureudpserver
本工程讲解DTLS服务端技术。DTLS服务端需要结合DTLS客户端即secureudpclient一起跑才有效果。通过本工程需要掌握下列技术点:
- QSslConfiguration、QUdpSocket、QHostAddress、QDtls、QNetworkInterface、QSslPreSharedKeyAuthenticator类的使用。
- qExchange、std::exchange函数用法。
- QTextEdit类插入html,以便用富文本、用不同颜色显示报文等信息。
- Q_UNREACHABLE宏用法。
2.19.threadedfortuneserver
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\threadedfortuneserver
本工程通过QTcpServer类构建一个基于TCP的简单服务器来展示相关类及技术点的使用,通过本例子,需掌握如下技术点:
- QTcpServer类是使用及如何子类化该类。
- 当有客户端来链接时,如何为客户端生成一个QThread的线程子类以提供服务。
- 通过QNetworkInterface类获取主机地址QHostAddress类。
- 掌握QThread类的使用,关于该类的详细使用,参见《QThread、moveToThread用法详述》
2.20.torrent
该工程存放在Qt安装目录下的
Examples\Qt-XX.XX.XX\network\torrent
本工程实现利用种子下载程序,类似迅雷。通过本工程需要掌握如下技术点:
- 如何子类化QItemDelegate类。
- 在树控件单元格中,如何利用代理类(QItemDelegate类的子类)绘制进度条。
- Q_GLOBAL_STATIC用法。具体参见《Q_GLOBAL_STATIC用法及如何保证多线程下的单例模式安全性》。
- QThread类用法。具体参见《QThread、moveToThread用法详述》。
- QTcpServer用法及如何子类化。
- 一些不起眼的知识点:QToolBar通过Qt::BottomToolBarArea停靠在MainWindow窗体的底部(大部分是停靠在上部);QSettings类的beginWriteArray、beginReadArray、sync函数用法。
由于Qt官方自带的例子很多,一下看不完,每看完一个例子,记录一个。未完,待续!