Qt文档阅读笔记-QSslSocket中与错误相关的信号
目录
基本概念
代码与实例
基本概念
放代码前先来看这个信号:
[signal] void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)
当socket状态改变后就会触发这个信息,其中socketState参数为当前socket的状态。
这里要注意的是QAbstractSocket::SocketState是没有注册的元类型,如果是进行队列连接(connect的第四个参数,主要在跨线程时用在本人的其他博文有对于connect第四个参数的详细介绍)就得用Q_DECLARE_METATYPE()声明,以及qRegisterMetaType进行注册(同样也有对应的博文讲解)
[signal] void QAbstractSocket::error(QAbstractSocket::SocketError socketError)
当有错误发送的时候,就会触发这个信号,参数为这个错误的描述。
这里官方给了一个建议:当socket没有连接上的时候,也会触发这个信号,但可以使用事件循环机制避免,比如使用QTimer::singleShot()设置延迟时间。
这里官方给出了一个connect例子
connect(abstractSocket, static_cast<void(QAbstractSocket::*)(QAbstractSocket::SocketError)>(&QAbstractSocket::error),[=](QAbstractSocket::SocketError socketError){ /* ... */ });
下面来看最后一个信号:
[signal] void QSslSocket::sslErrors(const QList<QSslError> &errors)
这个信号主要是在ssl握手后才会发出的,此类错误通常为连接错误,比如不能标识对方等等
官方也给出了一些提议,如果想忽略错误继续连接,可以使用QSslSocket::ignoreSslErrors(),或者调用sslErrors()在后期进行处理。
代码与实例
程序跑了几十秒后,我把网断了,运行截图如下:
源码如下:
#include <QCoreApplication>
#include <QSslSocket>
#include <QAbstractSocket>
#include <QSslCipher>
#include <QObject>
#include <QDebug>
#include <QList>
#include <QEventLoop>
#include <QSslError>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QSslSocket *socket = new QSslSocket;socket->connectToHostEncrypted("www.baidu.com", 443);QObject::connect(socket, static_cast<void(QSslSocket::*)(QAbstractSocket::SocketState)>(&QSslSocket::stateChanged),[=](QAbstractSocket::SocketState state){qDebug() << "The socket state is : " << state;});QObject::connect(socket, &QSslSocket::encrypted, [=](){QSslCipher ciph = socket->sessionCipher();QString cipher = QString("%1, %2 (%3/%4)").arg(ciph.authenticationMethod()).arg(ciph.name()).arg(ciph.usedBits()).arg(ciph.supportedBits());;qDebug() << "the cipher info is : " << cipher;});QObject::connect(socket, static_cast<void(QSslSocket::*)(QAbstractSocket::SocketError)>(&QSslSocket::error), [=](QAbstractSocket::SocketError error){qDebug() << "The error is : " << error;});QEventLoop loop;QObject::connect(socket, SIGNAL(sslErrors(QList<QSslError>)), &loop, SLOT(quit()));loop.exec();qDebug() << socket->sslErrors();return a.exec();
}
Qt文档阅读笔记-QSslSocket中与错误相关的信号相关推荐
- Qt文档阅读笔记-单元测试中构建标准检测程序(CPU、Linux性能、内存泄漏等)
这里需要介绍一个宏,主要就是靠使用这个宏完成功能: QBENCHMARK{//TODO } 在单元测试中,这个宏在那个函数中,那么这个函数就会进行多次测试,如果不需要多次调用可以用下面的这宏代替: Q ...
- Qt文档阅读笔记-共享库的创建与调用
使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...
- Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图
Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...
- Qt文档阅读笔记-Rotations Example相关
Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...
- Qt文档阅读笔记-QWebEngineView及QML WebEngineView
这里主要是最近有给Java Web项目及Qt项目需要混合,自己搞的QtWebEngine没有问题,而用了项目里面的,就有问题,在此阅读下官方资料,看看能不能解决这样莫名其妙的问题,在此记录下本次的阅读 ...
- Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)
moc(Meta-Object Compiler):用于处理Qt中关于C++的扩展. moc工具读取C++头文件,看看这个头文件里面的类是不是包含Q_OBJECT宏,它会将这个头文件,转换为带有met ...
- Qt文档阅读笔记-Fortune Client Example实例解析
目录 官方解析 实例代码 博主增加解析 官方解析 Fortune Client Example 以使用QTcpSocket为例子,服务端可以配合Fortune Server或Threaded Fort ...
- Qt文档阅读笔记-对Style Plugin Example实例的解析
目录 前言 Style Plugin Example SimpleStylePlugin Class 定义 SimpleStylePlugin Class 实现 main()函数 The Simple ...
- Qt文档阅读笔记-QSet官方解析及实例
目录 官方解析 博主栗子 官方解析 QSet类是一个模板类,他是一个哈希表集合. QSet<T>是Qt的一个普通容器类.QSet存储的值是不指明顺序的,QSet对这些值提供了快速检索的功能 ...
最新文章
- ClewareControl 2.4 发布,传感器控制程序,增加对 python 的支持
- android ble从设备,从Android设备发送命令到蓝牙
- byte数组存的是什么_结构体内存对齐是什么鬼?
- vs.php中使用apache或IIS7进行外部调试
- Python 集合定义及运算
- 一级计算机考试中的DBF,2017年计算机等考一级WPS2000辅导:使用DBF格式内容的方法...
- 8086可以用c语言编程吗,[求助]如何将C程序反汇编成8086汇编程序
- java常见的异常_Java常见的10个异常
- java max 函数_Java Math max()用法及代码示例
- 从Alignment 和 Uniformity的角度理解对比表征学习
- 利用“3 of 9 barcode”字体实现一维条形码(只支持英文等ASCII字符)
- 关于幂级数求和是否弃用首项的理解
- 51 Nod1113 矩阵快速幂
- win7 文件夹背景。安装使用主题后,变为不透明的经典界面。Win8.1Win10文件夹背景补丁与教程
- 读书笔记009:《伤寒论》- 足太阳膀胱经
- Python之freshman04
- 检测浏览器flash是否安装
- Cisco packet tracer 2811路由增加接口
- 立白洗衣粉之老子天下第一
- VB下载只需简单代码