QT DAY6

news2024/12/28 22:18:08

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    socket = new QTcpSocket(this);
    //如果连接服务器成功,该客户端就会发射一个connected的信号。
    //我们可以将信号连接到自定义的槽函数中处理相关逻辑
    //由于该链接只需连接一次,所以卸载构造函数中即可
    connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);
    //客户端与服务器连接后,如果服务器想客户端发来数据,那么该客户端就会自动发送一个readRead信号
    //我们可以将该信号连接到自定义的槽函数中处理相关逻辑
    connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
    connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);
}

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


void Widget::on_connectBtn_clicked()
{
    //获取ui界面的信息
    userName = ui -> usernameEdit -> text();
    QString hostName = ui -> ipEdit -> text();
    quint16 port = ui -> portEdit ->text().toUInt();

    //调用函数连接到主机
    socket -> connectToHost(hostName,port);

    ui ->ipEdit -> setEnabled(false);
    ui ->portEdit -> setEnabled(false);
    ui ->connectBtn -> setEnabled(false);
    ui ->usernameEdit -> setEnabled(false);
}

void Widget::connected_slot(){
    QMessageBox::information(this,"成功","连接服务器成功");
    QString msg = userName +"进入聊天室";
    socket -> write(msg.toLocal8Bit());
}

void Widget::readyRead_slot(){
    //读取该客户端信号对应槽函数的实现
    QByteArray msg = socket ->readAll();
    ui -> msgList -> addItem(QString::fromLocal8Bit(msg));

}


void Widget::on_sendBtn_clicked()
{
    QString m = ui ->msgEdit ->text();
    QString msg = userName + ":"+m;
    socket -> write(msg.toLocal8Bit());

    ui -> msgEdit -> clear();

}

//断开服务器按钮对应的槽函数
void Widget::on_disConnectBtn_clicked()
{
    QString msg = userName + ":离开聊天室";
    socket -> write(msg.toLocal8Bit());
    //调用成员函数disconnectFromHost
    //功能:断开客户端与服务器的连接
    socket -> disconnectFromHost();
    //当客户端与服务器断开连接后,该客户端就会发射一个disconnected的信号
    //我们可以将该信号与自定义的槽函数连接
    ui ->ipEdit -> setEnabled(true);
    ui ->portEdit -> setEnabled(true);
    ui ->connectBtn -> setEnabled(true);
    ui ->usernameEdit -> setEnabled(true);
}

void Widget::disconnected_slot(){
    QMessageBox::information(this,"退出","断开成功");
}

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

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

相关文章

【TypeScript学习】—基本类型(二)

【TypeScript学习】—基本类型(二) 一、TypeScript基本类型 //也可以直接用字面量进行类型声明let a:10; a10;//也可以使用 |来连接多个类型(联合类型)let b:"male"|"female"; b"male"; b"fe…

【Java】Java新特性--Records记录类型

Java 14引入了一个新的语言特性,即Records。Records是一种新的数据类,旨在简化Java中的数据类创建过程。它们提供了一种简洁的方式来创建具有默认的getter、setter、equals、hashCode和toString方法的不可变数据类。 以下是Records的基本语法&#xff1…

一文讲透:erp系统是什么?

erp系统是什么?这个看似简单的问题还真不好解答。因为现在99%的人都把ERP“系统”和ERP“软件”混淆了! ERP原本主要是专注于制造业的信息化问题,我把它叫真正的ERP“系统”。 但现在基本上只要是一个软件系统都可以叫ERP系统,什…

【动态规划】面试题 08.01. 三步问题

Halo,这里是Ppeua。平时主要更新C,数据结构算法,Linux与ROS…感兴趣就关注我bua! 文章目录 0. 题目解析1. 算法原理1.1 状态表示1.2 状态转移方程1.3初始化1.4 填表顺序1.5 返回值 2.算法代码 🐧 本篇是整个动态规划的…

9.2 消息对话框 画板 定时器

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//设置定时器timernew QTimer(this);timeidthis->startTimer(1000);connect(timer,&QTimer::timeout,this,&Widget::timeout_slot);speechernew QTextToSpeech(this);//边框this-&…

天眼情报分析——编程赛道——研究对象001续

前言: 此次情报分析依旧会分为几大块 一、ACWING 算法基础课 1.高精度加法和减法听都没听过 1.什么是高精度加减法? "高精度加法"和"高精度减法"是一类编程题目,通常出现在算法竞赛和在线编程平台上,比如…

金蝶云星空和金蝶云星空单据接口对接

金蝶云星空和金蝶云星空单据接口对接 接入系统:金蝶云星空 金蝶K/3Cloud(金蝶云星空)是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”,旨在帮助企业…

【科研论文配图绘制】task8 总结与回顾

task8 总结与回顾,这次组队学习大致掌握了常见python绘图工具包的使用,整体上和matlab的语法类似,也是用画布形式控制元素的绘制。印象深刻的是seaborn的使用,在之前做波士顿房价预测时候先接触了seaborn绘制的散点图、直方图和核…

手写Ribbon基本原理

本文已收录于专栏 《中间件合集》 目录 概念说明什么是RibbonRibbon和Nginx负载均衡的区别 工作流程代码实现RibbonSDK发送请求端引入RibbonSDK和Nacos的依赖配置文件中填写负载均衡策略调用代码 接收请求端执行效果发送请求端接收请求端 总结提升 概念说明 什么是Ribbon Ribb…

揭秘企业标准化作业:提升效率、降低成本、保障质量!为什么需要推行?

企业标准化作业是现今生产车间中出现频率非常高的一个词,那么什么是企业标准化作业?企业为什么推行标准化作业?标准化作业的实施有哪些好处?实施过程又有哪些难点呢?今天就来说一说! 企业标准化作业是对生产…

智能制造效率与创新:RFID智能设备的引领作用

在现代制造业中,如何提升生产效率、降低成本、实现创新已经成为制造企业持续追求的目标。随着科技的不断进步,智能制造RFID智能设备正逐渐成为实现这些目标的得力工具。本文将探讨智能制造RFID智能设备在提升制造效率和创新方面的引领作用。 实时生产监控…

如何使用ArcGIS去除卫星影像上的云

虽然目前发布的地图都是对云量进行过筛选(一般低于20%),但是还是有可能会遇到有云的情况(特别是下载历史影像的时候),那么这些云应该怎么去除呢,我们可以尝试使用ArcGIS进行处理。 识别像素 将…

通过使用过硫酸铵溶液轻松预处理铜催化剂基底具有独特底部轮廓的剥离光刻胶的开发

引言 石墨烯是sp2杂化碳原子的二维蜂窝晶格,自首次成功分离和表征单层石墨烯以来就引起了广泛关注。载流子迁移率、稳健的机械公差和高光学透明度为未来的超大规模器件的应用提供了巨大的利用机会。因此,英思特提出了化学剥离、外延生长、热解和化学气相…

FreeRTOS中断与任务之间同步(Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,422 )

前言: FreeRTOS中,中断需要注意几点: 何时使用中断;中断服务函数(ISR)要处理的数据量有多大,通常我们希望中断的切换越快越好,也就是说,ISR尽量采用耗时较少的处理方式…

2000-2022年上市公司融资约束SA指数(含原始数据+计算方法+计算结果)

2000-2022年上市企业的融资约束指数(含原始数据计算方法计算结果) 1、时间:2000-2022年 2、范围:沪深A股上市公司 3、指标: 证券代码、证券简称、统计截止日期、是否发生ST或*ST或PT、是否发生暂停上市、行业代码、…

【Java 基础篇】Java多态:让你的代码更灵活而强大

多态是面向对象编程中的一个重要概念,它允许我们在不同的对象上调用相同的方法,但根据对象的不同,可以产生不同的行为。在 Java 中,多态性是一个强大的特性,它有助于代码的可扩展性和可维护性。本篇博客将深入探讨 Jav…

javaee spring aop实现事务 项目结构

spring配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http://www.springframewo…

搭建hadoop集群的常见问题及解决办法

问题一: namenode -format重复初始化 出现问题的原因是重复初始化时会重新生成集群ID&#xff0c;而dn还是原先的集群ID&#xff0c;两者不匹配时无法启动相应的dn进程。 怎么查找问题原因&#xff1a;在logs目录下找到对应节点的.log文件&#xff0c;使用tail -200 文件名来查…

(vue)Vue项目中使用jsPDF和html2canvas生成PDF

(vue)Vue项目中使用jsPDF和html2canvas生成PDF 效果&#xff1a; 安装与使用 1.&#xff1a;安装jsPDF和html2canvas npm install jspdf html2canvas2.在需要生成PDF文档的组件中引入jsPDF和html2canvas <template><div><el-button type"primary"…

Android平台GB28181历史视音频文件检索规范探讨及技术实现

技术背景 我们在做Android平台GB28181设备接入侧模块的时候&#xff0c;特别是执法记录仪或类似场景&#xff0c;系统除了对常规的录像有要求&#xff0c;还需要能和GB28181平台侧交互&#xff0c;比如实现设备侧视音频文件检索、下载或回放。本文假定记录仪或相关设备已经完成…