目录

基本概念

代码与实例


基本概念

放代码前先来看这个信号:

[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中与错误相关的信号相关推荐

  1. Qt文档阅读笔记-单元测试中构建标准检测程序(CPU、Linux性能、内存泄漏等)

    这里需要介绍一个宏,主要就是靠使用这个宏完成功能: QBENCHMARK{//TODO } 在单元测试中,这个宏在那个函数中,那么这个函数就会进行多次测试,如果不需要多次调用可以用下面的这宏代替: Q ...

  2. Qt文档阅读笔记-共享库的创建与调用

    使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...

  3. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图

    Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...

  4. Qt文档阅读笔记-Rotations Example相关

    Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...

  5. Qt文档阅读笔记-QWebEngineView及QML WebEngineView

    这里主要是最近有给Java Web项目及Qt项目需要混合,自己搞的QtWebEngine没有问题,而用了项目里面的,就有问题,在此阅读下官方资料,看看能不能解决这样莫名其妙的问题,在此记录下本次的阅读 ...

  6. Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)

    moc(Meta-Object Compiler):用于处理Qt中关于C++的扩展. moc工具读取C++头文件,看看这个头文件里面的类是不是包含Q_OBJECT宏,它会将这个头文件,转换为带有met ...

  7. Qt文档阅读笔记-Fortune Client Example实例解析

    目录 官方解析 实例代码 博主增加解析 官方解析 Fortune Client Example 以使用QTcpSocket为例子,服务端可以配合Fortune Server或Threaded Fort ...

  8. Qt文档阅读笔记-对Style Plugin Example实例的解析

    目录 前言 Style Plugin Example SimpleStylePlugin Class 定义 SimpleStylePlugin Class 实现 main()函数 The Simple ...

  9. Qt文档阅读笔记-QSet官方解析及实例

    目录 官方解析 博主栗子 官方解析 QSet类是一个模板类,他是一个哈希表集合. QSet<T>是Qt的一个普通容器类.QSet存储的值是不指明顺序的,QSet对这些值提供了快速检索的功能 ...

最新文章

  1. ClewareControl 2.4 发布,传感器控制程序,增加对 python 的支持
  2. android ble从设备,从Android设备发送命令到蓝牙
  3. byte数组存的是什么_结构体内存对齐是什么鬼?
  4. vs.php中使用apache或IIS7进行外部调试
  5. Python 集合定义及运算
  6. 一级计算机考试中的DBF,2017年计算机等考一级WPS2000辅导:使用DBF格式内容的方法...
  7. 8086可以用c语言编程吗,[求助]如何将C程序反汇编成8086汇编程序
  8. java常见的异常_Java常见的10个异常
  9. java max 函数_Java Math max()用法及代码示例
  10. 从Alignment 和 Uniformity的角度理解对比表征学习
  11. 利用“3 of 9 barcode”字体实现一维条形码(只支持英文等ASCII字符)
  12. 关于幂级数求和是否弃用首项的理解
  13. 51 Nod1113 矩阵快速幂
  14. win7 文件夹背景。安装使用主题后,变为不透明的经典界面。Win8.1Win10文件夹背景补丁与教程
  15. 读书笔记009:《伤寒论》- 足太阳膀胱经
  16. Python之freshman04
  17. 检测浏览器flash是否安装
  18. Cisco packet tracer 2811路由增加接口
  19. 立白洗衣粉之老子天下第一
  20. VB下载只需简单代码

热门文章

  1. C# 将内存中的datatable数据导出为Excel(方法二,创建Excel对象导出)
  2. 毕业了去哪里工作,一位毕业多年北漂人的经验感悟
  3. 深度解析vsftpd服务
  4. 是未来的风口还是无声的战争,中国的saas平台究竟能不能做起来?
  5. 老板让我搞数字化转型?成功之后,我整理了这套超全的方法论
  6. 一个大屏监控380个泵房,13000个设备,智能水务是怎么实现的?
  7. 小白兔想的飞鸽传书(173dmba)安卓版
  8. 它有许多功能的局域网
  9. 程序员,你能真正掌握多少编程技术?
  10. HTML5科普知识:细数HTML5新增标签