QT基础知识5

news2024/11/27 10:25:00

思维导图

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.coloradmin.cn/o/2060680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微盟年中报:聚焦主业降本增效,经调整净亏损同比大幅收窄81.4%

8月21日,微盟集团(2013.HK)发布2024年中期业绩报告。在充满挑战的市场环境中,公司积极进行业务布局优化调整,战略性聚焦核心业务,集团总收入达8.67亿元人民币,整体毛利率保持平稳。报告期内&…

语言基础/单向链表的构建和使用(含Linux中SLIST的解析和使用)

文章目录 概述简单的链表描述链表的术语简单实现一个单链表 Linux之SLIST机理分析结构定义单链表初始化单链表插入元素单链表遍历元素单链表删除元素 Linux之SLIST使用实践纯C中typedef重命名带来的问题预留 概述 本文讲述了数据结构中单链表的基本概念,头指针、头…

监控状态流图中的测试点

此示例展示了如何将数据或状态指定为测试点,你可以在仿真过程中使用浮动范围绘制这些测试点或将其记录到MATLAB基本工作区。 关于状态流图中的测试点 Stateflow测试点是您可以在模拟过程中观察到的信号,例如,通过使用浮动范围块。您可以使用…

进阶SpringBoot之 SpringSecurity(1)环境搭建

Spring Security 中文文档 Spring Security 是一个 Java 框架,用于保护应用程序的安全性 它提供认证(authentication)、授权(authorization)和保护,以抵御常见的攻击 Spring Security 基于过滤器链的概念…

Linux虚拟机磁盘管理-创建新磁盘分区

1.查看新加的硬盘情况 b英文为block表示块 查看磁盘信息方法一:ll /dev/sd* 查看磁盘信息方法二:lsblk 2.创建分区 1)创建磁盘分区 以sdb这块磁盘进行分区为例 一个磁盘最多分4个分区 输入w进行确认创建一个房间,这个房间就能…

Nginx: 配置项之main段核心参数用法梳理

概述 我们了解下配置文件中的一个全局段,有哪些配置参数,包括后面的 events 字段,有哪些配置参数这里面也有一些核心参数, 对于我们Nginx运行的性能也是有很重要的帮助我们现在首先关注整个 main 段的一个核心参数用法所谓 main 段&#xff…

前后端分离开发:用 Apifox 高效管理 API

目录 1.前后台分离开发介绍 2.API 2.1 APIfox介绍 2.2 接口文档管理 1.前后台分离开发介绍 前端开发有2种方式:「前后台混合开发」和「前后台分离开发」。 前后台混合开发,顾名思义就是前台后台代码混在一起开发,如下图所示&#xff1a…

5. 数据结构—栈的实际案例

1. 10进制转8进制 void conversion(int n){LinkStack S;InitStack(S);while(n){Push(S,n%8);nn/8;}while(!StackEmpty(S)){int x;Pop(S,x);printf("%d",x);} } 2. 括号匹配 bool Matching(){LinkStack S;char ch,x;InitStack(S);while(cin>>ch){if(ch#)bre…

tomcat的session会话保持

1.Memcached简介 Memcached 只支持能序列化的数据类型,不支持持久化,基于 Key-Value 的内存缓存系统。 memcached虽然没有像redis 所具备的数据持久化功能,比如 RDB 和 AOF 都没有,但是可以通过做集群同步的方式, 让各…

netty websocket使用

一.maven依赖 <!-- springboot的依赖&#xff0c;如果系统不使用web相关的功能&#xff0c;也可以不使用 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>…

Matlab基本知识

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” %% Matlab基本的小常识 % (1)在每一行的语句后面加上分号&#xff08;一定要是英文的) a3; a5; % (2)多行注释&#xff1a;选中要注释的若干语句&#xff0c;快捷键CtrlR % a3; %…

【Vue3】集成 Element Plus

【Vue3】集成 Element Plus 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的…

openai whisper使用

whisper使用 介绍 Whisper是一种通用的语音识别模型。它是在大量不同音频数据集上训练的&#xff0c;也是一个多任务模型&#xff0c;可以执行多语言语音识别、语音翻译和语言识别。 GitHub&#xff1a;https://github.com/openai/whisper 论文链接&#xff1a;https://arx…

AI-Talk开发板更新CH32固件

一、说明 CSK6011A有33个GPIO&#xff0c;但把WIFI、LCD、TP、CAMERA这些外设全部加上后&#xff0c;CSK6011A的IO不够用&#xff0c;还差6个&#xff0c;所以增加了一颗IO扩展MCU。CSK6-MIX开发板使用的IO扩展MCU为CH32V003F4P6&#xff0c;并且SDK也包含了此MCU的固件。AI-Ta…

机械学习—零基础学习日志(如何理解概率论3)

随机变量的函数分布 一维随机变量分布&#xff0c;可以看到下图&#xff0c;X为不同情况的概率。而x如果是大于等于X&#xff0c;那么当x在40以内时&#xff0c;没有概率&#xff0c;为0。 当x变大&#xff0c;在40-80之间&#xff0c;那么x大于X的概率为&#xff0c;0.7&…

性能测试 —— 系统架构性能优化思路!

这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点。 系统性能问题分析流程 我们首先来分析下如果一个业务系统上线前没有性能问题&#xff0c;而在上线后出现了比较严重的性能问题&#xff0c;那么实际上潜在的场景主要来自于以下几个方面。 业务出…

回归预测 | Matlab实现BES-ESN秃鹰搜索算法优化回声状态网络多输入单输出回归预测

回归预测 | Matlab实现BES-ESN秃鹰搜索算法优化回声状态网络多输入单输出回归预测 目录 回归预测 | Matlab实现BES-ESN秃鹰搜索算法优化回声状态网络多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BES-ESN秃鹰搜索算法优化回声状态网络…

宿舍管理系统_o4dvi

TOC springboot574宿舍管理系统_o4dvi--论文 第一章 概述 1.1 研究背景 近些年&#xff0c;随着中国经济发展&#xff0c;人民的生活质量逐渐提高&#xff0c;对网络的依赖性越来越高&#xff0c;通过网络处理的事务越来越多。随着宿舍管理的常态化&#xff0c;如果依然采用…

JVM 运行时内存结构简介

JVM 运行时内存结构简介 一、前言二、JVM 运行时内存结构2.1 线程隔离数据区&#xff1a;2.2 线程共享数据区&#xff1a; 三、JVM 内存区域划分1. 程序计数器&#xff08;PC&#xff09;2. 虚拟机栈3. 本地方法栈4. Java 堆5. 方法区6. 运行时常量池 附录 一、前言 JVM&#…

LLM RAG检索生成的深度解析:理解其工作原理与应用

前言 2024年随着大模型进一步增强升级&#xff0c;越来越多的大模型应用落地&#xff0c;经过初期的探索和研究&#xff0c;目前业界逐渐收敛聚聚于两个主要的应用方向&#xff1a;RAG和Agents。今天我们就来先聊聊这个RAG&#xff5e; 一.RAG基本介绍 RAG&#xff1a;全称R…