当前位置: 首页 > news >正文

QT基础知识5

思维导图

client.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), socket(new QTcpSocket(this))//给客户端实例化分配空间
{ui->setupUi(this);//初始化界面ui->msgEdit->setEnabled(false);ui->sendBtn->setEnabled(false);ui->disconnectBtn->setEnabled(false);//如果成功连接到服务器,客户端就会自动发射一个connected信号,由于只需要连接一次,所以连接函数写在构造函数中connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);//我们可以将readyRead信号连接到自定义的槽函数,读取数据,由于只需要连接一次,所以连接函数写在构造函数中connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);//如果成功断开与服务器的连接,那么客户端就会自动发射一个disconnected信号,由于只需要连接一次,所以断开连接函数写在构造函数中connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);}Widget::~Widget()
{delete ui;
}//连接服务器按钮对应的槽函数
void Widget::on_connectBtn_clicked()
{//让客户端连接服务器                                             字符串转换成无符号整型socket->connectToHost(ui->IPEdit->text(),ui->PortEdit->text().toUInt());
}//connected信号对应的槽函数
void Widget::connected_slot()
{//告诉服务器,我这个客户端连接进来了userName = ui->userNameEdit->text();QString msg = userName+":进入聊天室";//将信息发送给服务器socket->write(msg.toLocal8Bit());//接下来就将组件的可用不可用状态进行改变设置一下ui->msgEdit->setEnabled(true);ui->sendBtn->setEnabled(true);ui->disconnectBtn->setEnabled(true);ui->userNameEdit->setEnabled(false);ui->IPEdit->setEnabled(false);ui->PortEdit->setEnabled(false);ui->connectBtn->setEnabled(false);//程序运行到此,说明客户端与服务器成功建立连接,如果服务器发来数据,那么客户端就会自动发射一个readyRead信号
}//readyRead信号对应的槽函数
void Widget::readyRead_slot()
{//读取服务器发来的数据QByteArray msg = socket->readAll();QString s1 = QString::fromLocal8Bit(msg);s1 = s1.mid(0,userName.size());//字符串截取用户名if(s1 == userName){//获取用户发出的消息内容QString s2 = (QString::fromLocal8Bit(msg)).mid(userName.size()+1,(QString::fromLocal8Bit(msg)).size()-userName.size());s2 = s2 + ":" + userName;QListWidgetItem *item = new QListWidgetItem(s2);item->setTextAlignment(Qt::AlignRight);//设置文本对齐方式为右对齐ui->listWidget->addItem(item);}else{ui->listWidget->addItem(QString::fromLocal8Bit(msg));}
}//disconnected信号对应的槽函数
void Widget::disconnected_slot()
{ui->msgEdit->setEnabled(false);ui->sendBtn->setEnabled(false);ui->disconnectBtn->setEnabled(false);ui->userNameEdit->setEnabled(true);ui->IPEdit->setEnabled(true);ui->PortEdit->setEnabled(true);ui->connectBtn->setEnabled(true);}//发送按钮对应的槽函数
void Widget::on_sendBtn_clicked()
{//获取ui界面上要发送的信息QString msg = ui->msgEdit->text();msg = userName + ":" + msg;//将信息发送给服务器socket->write(msg.toLocal8Bit());//清空行编辑器ui->msgEdit->clear();
}//断开连接按钮对应的槽函数
void Widget::on_disconnectBtn_clicked()
{//告诉服务器,本大爷要离开了QString msg = userName + ":离开聊天室";//信息发送给服务器socket->write(msg.toLocal8Bit());//断开与服务器端的连接socket->disconnectFromHost();
}

http://www.lryc.cn/news/429742.html

相关文章:

  • C++中vector存放内置数据类型
  • shell编程:安装部署前常见环境检查
  • 思特科技:国家宝藏数字体验馆展现东方美学 让“文物活起来”
  • ES6笔记总结(Xmind格式):第二天
  • Kotlin 流flow、ShareFlow、StateFlow、Channel的解释与使用
  • 【个人学习】JVM(7):方法区概述、方法区内部结构、垃圾回收等
  • @Scheduled 定时任务自定义
  • 一种新颖的面试方式
  • 【Linux】生产消费模型实践 --- 基于信号量的环形队列
  • Science Robotics 与蜜蜂群互动的蜂窝型机器人系统
  • Vue 计算属性:优雅地处理数据逻辑
  • C++中`union`
  • Linux——网络(1)
  • 【五】阿伟开始学Kafka
  • Java—Arrays api
  • Java - 基数排序算法介绍、应用场景和示例代码
  • Django 后端架构开发:文件云存储,从本地存储到腾讯COS桶集成
  • 【系统分析师】-综合知识-计算机网络与信息安全
  • C++ | Leetcode C++题解之第363题矩形区域不超过K的最大数值和
  • python动画:场景的线性变换展示
  • HBase体系架构与环境搭建
  • 海思SD3403/SS928V100开发(16)Tsensor驱动开发
  • JVM类加载机制—JVM类加载过程
  • 可变参数模板与包装器
  • 工业控制常用“对象“数据类型汇总(数据结构篇)
  • 优雅处理枚举前端丢失大Long精度问题
  • 【c/c++】 学习ector 容器笔记
  • DN专业3D图形制作软件win/mac软件安装下载(附下载链接)
  • VSCode搭建Hzero(SpringCloud架构)后端开发调试环境
  • 【C++】OJ习题(初阶)