Qt下socket介绍 与 qmake 分析
计25 梁盾

Presenter Notes

大纲

  • Qt下socket介绍

  • Qt多线程介绍

  • QMake以及信号槽分析

Presenter Notes

Qt下的socket运用

Qt对几种不同协议的socket进行了封装,均继承自QAbstractSocket

  • UDP协议

    QUdpSocket : 此类提供对UDP的socket

  • TCP协议

    • QTcpSocket : 此类提供对TCP的socket
    • QTcpServer : 此类提供TCP服务

Presenter Notes

QUdpSocket 功能简介

Presenter Notes

QUdpSocket 功能简介

几个重要的函数

  • 发送数据

    1 qint64 QUdpSocket::writeDatagram(
    2     const char *data, qint64 size,              //数据
    3     const QHostAddress &address, quint16 port)  //地址端口
    
  • 接收数据

    1 qint64 QUdpSocket::readDatagram(
    2     char * data, qint64 maxSize,                //数据
    3     QHostAddress *address=0, quint16 *port=0)   //地址端口
    

Presenter Notes

QUdpSocket 功能简介

几个重要的函数

  • 端口绑定

    1 bool QAbstractSocket::bind(
    2     const QHostAddress &address,                //地址
    3     quint16 port = 0,                           //端口
    4     BindMode mode = DefaultForPlatform)         //绑定模式
    
  • 接收数据信号

    1 void QIODevice::readyRead() //当绑定的端口接受到数据时运行
    

Presenter Notes

QTcpSocket 功能简介

Presenter Notes

QTcpSocket 功能简介

因为不能绑定端口,功能比 QUdpSocket 更简单

几个重要的函数

  • 读取/发送数据

    1 qint64 QIODevice::read(char * data, qint64 maxSize)
    2 qint64 QIODevice::write(const char * data, qint64 maxSize)
    
  • 连接服务器

    1 void QAbstractSocket::connectToHost(
    2     const QString & hostName,                   //服务器地址
    3     quint16 port,                               //服务器端口
    4     OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol)
    

Presenter Notes

QTcpServer 功能简介

Presenter Notes

QTcpServer 功能简介

此类用于架设TCP服务器,优点是非阻塞

  • 监听端口

    1 bool QTcpServer::listen(
    2     const QHostAddress & address = QHostAddress::Any, 
    3     quint16 port = 0)
    
  • 客户端连接信号

    1 void QTcpServer::newConnection() // [signal]
    
  • 获得连接服务器的socket

    1 QTcpSocket* QTcpServer::nextPendingConnection()
    

TIPS : 活用 Qt creator 的 F1(帮助)

Presenter Notes

QThread 功能简介

Presenter Notes

QThread 功能简介

从 QThread 继承并重载虚函数 run()

1 class Thread : public QThread { 
2   Q_OBJECT 
3   public: 
4     Thread(QObject* parent=0):QThread(parent){} 
5     void run() {
6       //你的代码
7     } 
8 };
  • 开始运行

    1 void QThread::start()
    
  • 线程运行结束信号

    1 void QThread::finished() // [signal]
    

Presenter Notes

QMake以及信号槽分析 qmake到底干了什么

Presenter Notes

QMake以及信号槽分析 qmake到底干了什么

问题

  • QMake干了什么

  • 信号槽是如何实现的

  • Qt代码可移植性

Presenter Notes

QMake干了什么

  • 分析ui文件,生成代码

  • 分析从QObject继承而来的类,生成moc代码

  • 生成makefile文件

Presenter Notes

信号槽是如何实现的

  • slots signals emit 保留字?

    实际上并不是什么保留字,而是一个宏定义,用于给qmake做语法分析

    1 //from qobjectdefs.h
    2 #define slots
    3 #define signals public
    4 #define emit
    
  • signal函数为何不用定义?

    在moc文件中定义了

  • SLOT(a) SIGNAL(a) 是什么?

    1 //from qobjectdefs.h
    2 #define SLOT(a)     qFlagLocation("1"#a QLOCATION)
    3 #define SIGNAL(a)   qFlagLocation("2"#a QLOCATION)
    

    用于进行信号槽的匹配

Presenter Notes

Qt代码可移植性

  • UI无法相互移植,事件循环是阻碍

  • qmake并不是必须的

Presenter Notes

Thank You



此ppt由markdown编写,landslide开源工具生成

Presenter Notes

欢迎提问~

Presenter Notes