QT学习day5

news2025/1/31 11:09:54
#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);

}

Widget::~Widget()
{
    delete ui;
}

//连接按钮对应用的槽函数处理
void Widget::on_connectBtn_clicked()
{   //获取到ui界面上的ip和端口号
    QString ip=ui->ipEdit->text();
    quint16 port=ui->portEdit->text().toUInt();
    //客户端连接服务器
    socket->connectToHost(ip,port);


}
//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()信号
    //将该信号连接到自定义的槽函数中,读取数据,由于只需要连接一次,那么连接函数写在构造函数中
}
 void Widget::readyRead_slot()
{
 //读取数据
     QByteArray msg=socket->readAll();
     //将读取的数据放在ui上
     ui->listWidget->addItem(QString::fromLocal8Bit(msg));
 }
 //f发送按钮对应的槽函数处理
void Widget::on_sendBtn_clicked()
{
   //获取ui界面上的内容
    QString msg=ui->msgEdit->text();
    //组织语言
    msg=userName+": "+msg;
    socket->write(msg.toLocal8Bit());
}

void Widget::on_disconnectBtn_clicked()
{
    QString msg=userName+": 退出聊天室";
    socket->write(msg.toLocal8Bit());//将数据发送服务器
    socket->disconnectFromHost();//断开连接
    connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnectBtn_slot);
   // 收到断开的信号运行disconnectBtn_slot()
}
void Widget::disconnectBtn_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);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1586392.html

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

相关文章

软考121-上午题-【软件工程】-敏捷方法

一、敏捷方法 敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。通过在软件开发过程中加入灵活性,敏捷方法使用户能够在开发周期的后期增加或改变需求。 敏捷过程的典型方法有很多,每一种方法基于一套原则,这…

初始C++之缺省参数 函数重载 引用

初始C之缺省参数 函数重载 引用& 文章目录 初始C之缺省参数 函数重载 引用&一、缺省参数1.1 缺省参数的定义1.2 缺省参数的分类1.3 注意事项 二、 函数重载2.1 函数重载的定义2.2 参数个数不同2.3 参数类型不同2.4 类型顺序不同2.5 为什么C语言不支持函数重载 三、引用…

百度Create AI开发者大会剧透丨用好三大AI神器 ,人人都是开发者

程序员会消失,真的吗?大模型的下一站是什么?开发者的机会在哪里?什么才是最好用的AI应用开发工具?在4月16日举办的2024百度Create AI开发者大会上,百度创始人、董事长兼首席执行官李彦宏将就这些备受瞩目的…

蓝桥杯第十三届电子类单片机组决赛程序设计

前言 一、决赛题目 1.比赛题目 2.题目解读 二、功能实现 1.关于定时器资源 1)超声波和NE555需要的定时器资源 2)定时器2 2.单位切换 3.数据长度不足时,高位熄灭 4.AD/DA多通道的处理 5.PWM输出 6.长按功能的实现 三、完整代码演…

心法利器[112] | 考古RAG-20年RAG概念提出的论文

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。 2023年新的文章合集已经发布,获取方式看这里:又添十万字-CS的陋室2023年文章合集来袭,更…

瑞_23种设计模式_访问者模式

文章目录 1 访问者模式(Visitor Pattern)1.1 介绍1.2 概述1.3 访问者模式的结构1.4 访问者模式的优缺点1.5 访问者模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 拓展——双分派4.1 分派4.2 动态分派(多态&am…

ubuntu 20.04 更新显卡驱动

1. 问题描述 $ watch -n 1 nvidia-smi画面不动 而且运行 pytorch 代码时出现问题: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 11070). Please update your GPU driver by downloading and installing a new…

libVLC 视频窗口上叠加透明窗口

很多时候,我们需要在界面上画一些三角形、文字等之类的东西,我们之需要重写paintEvent方法,比如像这样 void Widget::paintEvent(QPaintEvent *event) 以下就是重写的代码。 void Widget::paintEvent(QPaintEvent *event) {//创建QPainte…

家居网购项目(一)

文章目录 1.前置知识1.项目开发阶段2.Java经典三层架构3.项目具体分层(包方案)4.MVC 2.开发环境搭建1.新建普通javaweb项目,导入jar包2.创建项目结构3.搭建前端页面 3.会员注册前端js校验1.需求分析2.代码login.html 3.结果4.调试阶段1.验证信…

算法训练营第24天回溯(组合)

回溯(组合) 模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯&…

6.11物联网RK3399项目开发实录-驱动开发之定时器的使用(wulianjishu666)

嵌入式实战开发例程【珍贵收藏,开发必备】: 链接:https://pan.baidu.com/s/1tkDBNH9R3iAaHOG1Zj9q1Q?pwdt41u 定时器使用 前言 RK3399有 12 个 Timers (timer0-timer11),有 12 个 Secure Timers(stimer0~stimer11) 和 2 个 …

LC 501.二叉搜索树中的众数

501.二叉搜索树中的众数 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 …

深入浅出 -- 系统架构之在Java体系中的微服务标准组件

前面我们介绍了微服务架构的各个组件以及各组件的职责,在Java领域中,Spring可以说是无人不知无人不晓的,我们现代的企业级应用和互联网应用,很大一部分都是构建在Spring生态体系上的,同样,实现微服务架构的…

MySQL高级详解

文章目录 约束概述分类主键约束概述特点定义及删除主键自增 唯一约束作用语法 非空约束作用语法 面试题:非空唯一约束与主键约束有什么区别默认值约束作用语法 总结 表关系及外键约束表关系概述分类一对多关系表设计外键字段设计原则 多对多关系表设定设计原则 一对…

【图论】Dijkstra单源最短路径-朴素方法-简单模板(迪杰斯特拉算法)

Dijkstra单源最短路径 问题描述 输入n 表示n个结点,m表示m条边,求编号1的结点到每个点的最短路径 输出从第一个点到第n个点的最短路径 思路 将图g[][]中所有的权值初始化为0x3f表示正无穷 将dist[]中所有的值初始化为0x3f表示从第一个点到所有点的距离…

一辆新能源汽车需要多少颗传感器?

随着科技的发展和环保意识的日益提高,新能源汽车(包括纯电动汽车、混合动力汽车等)在全球范围内越来越受到欢迎。这些汽车不仅减少了碳排放,还推动了汽车产业的创新。然而,这些高科技汽车的背后,隐藏着许多…

Qt中播放GIF动画

在Qt应用程序中,如果你想在QLabel控件上播放GIF动画,可以使用QMovie类与QLabel配合来实现。以下是详细步骤和代码示例: 步骤1:引入必要的头文件 首先,在你的源代码文件中包含QMovie和QLabel相关的头文件:…

Java官网下载JDK21版本详细教程(下载、安装、环境变量配置)

文章目录 前言:一、下载(一).链接(直达JDK21)(二).官网搜索(可选其他版本) 二、安装三、环境变量配置四、验证安装和配置五、常见问题解答 前言: 本文将为您提供关于Java官网下载JDK21版本的详细教程。作为…

springboot在使用 Servlet API中提供的javax.servlet.Filter 过滤器 对请求参数 和 响应参数 进行获取并记录日志方案

不多说 直接上代码 第一步 package com.xxx.init.webFilter;import com.alibaba.fastjson.JSONObject; import com.xxx.api.constant.CommonConstant; import com.xxx.api.entities.log.OperationLog; import com.xxx.init.utils.JwtHelper; import com.xxx.init.utils.Reques…

King‘s AUTO的QI妙能力|实验室“总导演”

在2023年夏天,两场国际赛事分别在成都、杭州盛大举办——第31届世界大学生夏季运动会(大运会)以及第19届亚洲运动会(亚运会)。为确保开幕式的顺利进行,大运会共进行了三次全要素彩排,而亚运会则…