Lambda表达式
connect(对象名,&类名::信号,[xxxx] (){ 函数体});
[xxxx]可以是
[this]
表示只以传递的方式捕获当前指针
[]如果是空的就表示不补获任何外部变量
说明(在这里外部变量指的是函数体之外)
= 以传值的方式捕获所有的外部变量
[&] 以传引用的方式捕获所有的外部变量
[x,&y] x以传值的方式捕获 y以喘引用的方式捕获
[&,x] x以传值的方式捕获 剩余的外部变量用传引用的方式捕获
槽函数定义为 on_ 按钮名_信号名();可直接不用信号与曹链接
UDP,TCP 通信
QUdpSocket 类 效率高不可靠会有丢包情况
派生自QAbstractSocket 通信抽象类
udp指针->writeDatagram(btData.data(), btData.size(), QHostAddress::Broadcast, port);//往udp中写入数据
QHostAddress::Broadcast(即 255.255.255.255 )广播的方式写 服务端广播数据 特殊的地址进行广播 一般建议发的数据报小于512字节 port表示端口号 一般选择 1024-65535 1024以下用作常用端口号不建议使用 btData.data() 数据(char类型) btData.size() 数据的大小 btData为QBteArray
注 发送的数据一般都是 QBteArray 类型字节数组类 如是别的类型需转换
Socket通信 要在项目文件中 QT+=core gui network
// 网络编程支持
m_udpReceiver->bind(port, QUdpSocket::ShareAddress)//以共享的方式绑定端口
connect(m_udpReceiver, &QUdpSocket::readyRead, this, &TalkWindowShell::processPendingData);//有数据过来会发射信号 processPendingData//自定义槽函数用于处理发来的数据
m_udpReceiver->hasPendingDatagrams() ;udp接收端 是否有未处理的数据 有返回真
QByteArray btData;//字节数组类
btData.resize(m_udpReceiver->pendingDatagramSize());//这个字节数组大小设置为udp未处理的数据的大小
m_udpReceiver->readDatagram(btData.data(), btData.size());//读取udp数据
TCP 一对一传输 QTcpSocket 类 可靠
派生自QAbstractSocket通信抽象类 C/S模型 客户端和服务端
Socket通信 要在项目文件中 QT+=core gui network
// 网络编程支持
服务端 QTcpServer
QTcpServer ->listen(QHostAddress::AnyIPv4, port);//监听来自任何主机 port端口号int 类型 QHostAddress::AnyIPv4 任何ip地址 也可直接输入某个ip
qDebug<<QTcpServer ->errorString(); 这段代码表示打印出监听不成功的信息
connect(tcpServer,&QTcpServer::newConnection,this,&类名::onNewConnect);//信号与曹的链接 如果有新的链接来了 就执行槽函数
QTcpSocket =tcpServer->nextPendingConnection();返回当前链接的客户端 用QTcpSocket 保存
套接字 QTcpSocket
tcpSocket->abort();//终止链接
tcpSocket->connectToHost(“127.0.0.1”, 端口号);//链接主机
connect(QTcpSocket ,&QTcpSocket::disconnected,QTcpSocket,&QTcpSocket::deleteLater);//如果断开了链接就销毁这个链接 标准函数库
connect(this, SIGNAL(readyRead()), this, SLOT(onReceiveData()));//当有消息来就会发射readyRead()信号 自定义槽
-
1. QTcpSocket ->write(QByteArray);//tcp写 入数据//QString.toutf8()//转成字节数组类 QTcpSocket ->flush();//清空socket输入缓冲区 2. QByteArray buffer;//字节数组类 3. buffer.resize(QTcpSocket->bytesAvailable() );//设置大小为接收到数据得大小 4. buffer= QTcpSocket->readAll();//获取到所有接收得数据 5. buffer= QTcpSocket->read(buffer,buffer.size());//获取到接收得数据
connect(QTcpSocket ,SIGNAL(QAbstractSocket::SocketError ),this,SLOT(onError(QAbstractSocket::SocketError e));//如果tcp发生错误 自定义槽 (发射信号编译器带参)
void onError(QAbstractSocket::SocketError e)
{
qDebug()<<"错误信息"<<e<<endl;
}