day5Qt作业

 服务器端

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//准备组件,初始化组件状态this->setFixedSize(800,600);chatwidget = new QListWidget(this);chatwidget->setFixedSize(800,430);chatwidget->setEnabled(false);portedit = new QLineEdit(this);portedit->resize(400,50);portedit->move(80,480);startbtn = new QPushButton("启动",this);startbtn->setStyleSheet("background-color:red");startbtn->resize(150,80);startbtn->move(520,465);//startbtn按钮的点击信号与槽函数连接connect(startbtn,&QPushButton::clicked,this,&Widget::startbtn_slot);ser = new QTcpServer(this);//实意化服务器类对象connect(ser,&QTcpServer::newConnection,this,&Widget::serconnect_slot); //连接 每当新的客户端连接,服务器发出的newconection信号 与对应的槽函数}
Widget::~Widget()
{delete ui;
}//startbtn按钮的点击信号对应的槽函数
void Widget::startbtn_slot()
{if(startbtn->text() == "启动"){//启动按钮后调用监听int port = portedit->text().toUInt();//获取行编辑器输入的端口号if(port<1024 || port>49151){QMessageBox::information(this,"提示","端口号不可用");return;}if(ser->listen(QHostAddress::Any,port)==true)//设置服务器的IP地址端口号,监听状态{//启用聊天窗口,禁用端口行编辑器,设置按钮背景色chatwidget->setEnabled(true);portedit->setEnabled(false);startbtn->setStyleSheet("background-color:blue");QMessageBox::information(this,"成功","服务器启动成功");startbtn->setText("关闭");//启动后将按钮文本设置为关闭}else{QMessageBox::information(this,"失败","服务器启动失败");}}else if(startbtn->text() == "关闭"){chatwidget->setEnabled(false);portedit->setEnabled(true);startbtn->setStyleSheet("background-color:red");QMessageBox::information(this,"成功","服务器关闭");startbtn->setText("开启");//启动后将按钮文本设置为开启}
}//服务器发出的newconection信号对应的槽函数处理
void Widget::serconnect_slot()
{QTcpSocket *socket = ser->nextPendingConnection();//返回连接到的客户端信息clilist.append(socket);//将信息放到容器中保存//每当有客户端向服务器发送数据时,socket会向服务器发送一个readyread信号connect(socket,&QTcpSocket::readyRead,this,&Widget::socket_readyread);//将所连接客户端的服务器都连接到槽函数
}//处理socket发送的readyread信号的槽函数
void Widget::socket_readyread()
{//在这个函数内就可以实现数据收发//先遍历链表中的客户端,如果是无效链接则删除掉for(int i=0;i<clilist.length();i++){//判断连接状态if(clilist[i]->state() == QTcpSocket::UnconnectedState) //判断这个链接状态是否是无效链接{//是则删除clilist.removeAt(i);}//不是无效链接判断是否有数据待读else if(clilist[i]->bytesAvailable() != 0){QByteArray msg = clilist[i]->readAll();//将客户端发来的数据督导msg里面chatwidget->addItem(QString::fromLocal8Bit(msg));//将信息展示在聊天框上//遍历转发除了发送信息客户端for(int j=0;j<clilist.length();j++){if(i!=j){clilist[j]->write(msg);}}}}
}

客户端 

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setFixedSize(800,600);chatwidget = new QListWidget(this);chatwidget->resize(800,400);chatwidget->setEnabled(false);usrlab = new QLabel("用户名",this);usrlab->move(30,470);usredit = new QLineEdit(this);usredit->move(90,460);usredit->resize(300,30);iplab = new QLabel("ip",this);iplab->move(30,510);ipedit = new QLineEdit(this);ipedit->move(90,500);ipedit->resize(300,30);portlab = new QLabel("port",this);portlab->move(30,545);portedit = new QLineEdit(this);portedit->move(90,540);portedit->resize(300,30);msgedit = new QLineEdit(this);msgedit->move(90,410);msgedit->resize(400,40);msgedit->setEnabled(false);sendbtn = new QPushButton("发送",this);sendbtn->move(510,408);sendbtn->resize(150,47);
//    sendbtn->setStyleSheet("background-color:red");sendbtn->setEnabled(false);connectbtn = new QPushButton("连接服务器",this);connectbtn->move(480,490);connectbtn->resize(200,80);connectbtn->setStyleSheet("background-color:red");cli = new QTcpSocket(this);//实意化客户端类对象//点击连接服务器按钮的信号与槽函数连接connect(connectbtn,&QPushButton::clicked,&Widget::connectbtn_slot);connect(sendbtn,&QPushButton::clicked,&Widget::sendbtn_slot);//客户端连接信号与槽函数连接connect(cli,&QTcpSocket::connected,this,&Widget::connected_slot);connect(msgedit,&QLineEdit::textChanged,this,&Widget::sentbtn_available_slot);}void Widget::connected_slot()
{QMessageBox::information(this,"连接","连接服务器成功!!");
}void Widget::connectbtn_slot()
{//一按钮两用if(connectbtn->text()=="连接服务器"){//点击连接服务器之后获取行编辑器的文本信息QString usrname=usredit->text();quint16 port=portedit->text().toUInt();QString ip=ipedit->text();//连接整个后禁用服务器端信息编辑,启用聊天窗口和信息编辑器chatwidget->setEnabled(true);msgedit->setEnabled(true);usredit->setEnabled(false);ipedit->setEnabled(false);portedit->setEnabled(false);//向给定的IP地址端口号发送链接请求cli->connectToHost(ip,port);connectbtn->setText("断开服务器");//连接成功后会发送cli会发送一个connected信号,对这个信号处理即可}else{//断开连接整个后启用服务器端信息编辑,禁用聊天窗口和信息编辑器usredit->setEnabled(true);ipedit->setEnabled(true);portedit->setEnabled(true);chatwidget->setEnabled(false);sendbtn->setEnabled(false);msgedit->setEnabled(false);QString msg = usrname + "离开聊天室" ;cli->write(msg.toLocal8Bit());cli->disconnectFromHost();connectbtn->setText("连接服务器");}
}void Widget::sendbtn_slot()
{QString msg= usrname + ":" + msgedit->text();cli->write(msg.toLocal8Bit());QString msg1=msgedit->text();QListWidgetItem *Item=new QListWidgetItem(msg1);Item->setTextAlignment(Qt::AlignRight);   //自己发送的文本右边显示chatwidget->addItem(Item);msgedit->clear();
}//处理readyread对应槽函数
void Widget::readyRead_slot()
{QByteArray msg =cli->readAll();chatwidget->addItem(QString::fromLocal8Bit(msg));}void Widget::disconnect_slot()
{QMessageBox::information(this,"断开","断开服务器连接成功");
}void Widget::sentbtn_available_slot()
{if(msgedit->text().length()>0){sendbtn->setEnabled(true);}
}Widget::~Widget()
{delete ui;
}

 学生管理系统

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);if(!db.contains("mydb.db")){db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("mydb.db");}if(!db.open()){QMessageBox::information(this,"失败","数据库打开失败");return;}QString sql = "create table if not exists Stu(numb int ,name char,sex char,score float);";QSqlQuery query;if(query.exec(sql)==false){QMessageBox::information(this,"提示","创建数据表失败");return;}}Widget::~Widget()
{delete ui;
}void Widget::on_addbtn_clicked()
{ui->tableWidget->clear();//QString sql = QString(%1)int ui_numb=ui->numbedit->text().toUInt();QString ui_name= ui->nameedit->text();QString ui_sex = ui->sexedit->text();float ui_score = ui->scoreedit->text().toFloat();if(ui_sex==NULL || ui_numb==0 || ui_score==0 || ui_name==NULL){QMessageBox::information(this,"提示","请将信息填写完整");return;}else if(!(ui_sex == "男" || ui_sex == "女")){QMessageBox::information(this,"提示","性别信息错误");return;}QString sql = QString("insert into Stu values(%1,'%2','%3',%4);").arg(ui_numb).arg(ui_name).arg(ui_sex).arg(ui_score);QSqlQuery query;if(query.exec(sql)){QMessageBox::information(this,"提示","添加数据成功");ui->numbedit->clear();ui->nameedit->clear();ui->sexedit->clear();ui->scoreedit->clear();return;}else{QMessageBox::information(this,"提示","添加数据失败");return;}
}void Widget::on_searchbtn_clicked()
{ui->tableWidget->clear();QString sql;if(ui->numbedit->text()==NULL){sql = "select * from Stu";}else{sql = QString("select * from stu where numb=%1;").arg(ui->numbedit->text());}QSqlQuery query;if(!query.exec(sql)){QMessageBox::information(this,"提示","查询失败");return;}int i=0;while(query.next()){//任意一个查询的结果//qDebug() << query.record().value(1).toString();for(int j=0;j<query.record().count();j++){qDebug() << query.record().value(j).toString();QTableWidgetItem *Item=new QTableWidgetItem(query.record().value(j).toString());Item->setTextAlignment(Qt::AlignCenter);ui->tableWidget->setItem(i,j,Item);}i++;}
}void Widget::on_updatabtn_clicked()
{ui->tableWidget->clear();int ui_numb=ui->numbedit->text().toUInt();QString ui_name= ui->nameedit->text();QString ui_sex = ui->sexedit->text();float ui_score = ui->scoreedit->text().toFloat();if(ui_sex==NULL || ui_numb==0 || ui_score==0 || ui_name==NULL){QMessageBox::information(this,"提示","请将信息填写完整");return;}else if(!(ui_sex == "男" || ui_sex == "女")){QMessageBox::information(this,"提示","性别信息错误");return;}//QString sql = QString("update Stu set numb=%1 where name='%2'").arg(ui_numb).arg(ui_name);//qDebug() << sql;QString sql = QString("update Stu set name='%1',sex='%2',score=%3 where numb=%4;").arg(ui_name).arg(ui_sex).arg(ui_score).arg(ui_numb);QSqlQuery query;if(query.exec(sql))//{QMessageBox::information(this,"提示","修改数据成功");ui->numbedit->clear();ui->nameedit->clear();ui->sexedit->clear();ui->scoreedit->clear();return;}else{QMessageBox::information(this,"提示","修该数据失败");query.lastError();return;}
}
//lasrErrorvoid Widget::on_delbtn_clicked()
{ui->tableWidget->clear();int ui_numb=ui->numbedit->text().toUInt();if( ui_numb==0 ){QMessageBox::information(this,"提示","请填写正确学号");return;}QString sql = QString("delete from Stu where numb=%1;").arg(ui_numb);QSqlQuery query;if(query.exec(sql))//{QMessageBox::information(this,"提示","删除数据成功");ui->numbedit->clear();ui->nameedit->clear();ui->sexedit->clear();ui->scoreedit->clear();return;}else{QMessageBox::information(this,"提示","删除数据失败");query.lastError();return;}
}void Widget::on_sortbtn_clicked()
{//  int ui_numb=ui->numbedit->text().toUInt();
//     QMessageBox box(QMessageBox::Question,"选择","请选择学号或者分数排序",QMessageBox::Ok|QMessageBox::Save);
//     box.setDefaultButton(QMessageBox::Ok);
//     box.setButtonText(QMessageBox::Ok,"学号");
//     box.setButtonText(QMessageBox::Save,"分数");
//     int res = box.exec();
//     QString sql;
//     if(res==QMessageBox::Ok)
//     {
//        sql = QString("select * from Stu order by numb asc");
//     }
//     else if(res==QMessageBox::Save)
//     {
//         sql = QString("select * from Stu order by score asc");
//     }QString sql="select * from Stu ORDER BY score;";QSqlQuery query;ui->tableWidget->clear();if(query.exec(sql))//{QMessageBox::information(this,"提示","更改排序成功");ui->numbedit->clear();ui->nameedit->clear();ui->sexedit->clear();ui->scoreedit->clear();return;}else{QMessageBox::information(this,"提示","更改排序失败");query.lastError();return;}}

 

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

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

相关文章

【Linux】Linux——Centos7安装Tomcat

1.下载Tomcat 安装包 官网地址&#xff1a;Apache Tomcat - Apache Tomcat 9 Software Downloadshttps://tomcat.apache.org/download-90.cgi 2.将下载的安装包上传到 Xftp 上&#xff0c;我是直接放到 usr 下了 3.将安装包解压到 /usr/local/ tar -zxvf apache-tomcat-9.0.8…

Java+SpringBoot+JSP实现在线心理评测与咨询系统

前言介绍 随着互联网技术的高速发展&#xff0c;人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理&#xff0c;交易等&#xff0c;而且过程简单、快捷。同样的&#xff0c;在人们的工作生活中&#xff0c;也就…

249 基于matlab的MED、OMEDA、MOMEDA、MCKD信号处理方法

基于matlab的MED、OMEDA、MOMEDA、MCKD信号处理方法。最小熵反褶积(MED)&#xff0c;最优最小熵反卷积调整卷积 (OMEDA),多点最优最小熵解卷积调整&#xff08;Multipoint Optimal Minimum Entropy Deconvolution Adjusted&#xff0c;MOMEDA&#xff09;&#xff0c;最大相关峭…

Neuralink首个脑机接口患者:打游戏、搞研究两不误,重获自主能力

今年1月28日&#xff0c;Neuralink首次将侵入式脑机接口植入人类患者Noland Arbaugh的大脑。100天后&#xff0c;这家由埃隆马斯克创立的公司公布了最新的进展。从Neuralink的更新中我们可以看到&#xff0c;Arbaugh的恢复情况超出预期&#xff0c;他的用户体验也非常积极。 原…

Android 按钮Button点击音效

一、新建工程 编译运行&#xff0c;确保工程无误&#xff0c;这里不过多赘述。 二、UI布局 添加两个播放音效Button <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"…

芋道系统springcloud模块启动报错,枚举类不能为空

问题描述&#xff1a; Error starting ApplicationContext. To display the conditions report re-run your application with debug enabled. 2024-05-10 15:50:15.756 | ERROR 9120 | main [TID: N/A] o.s.b.d.LoggingFailureAnalysisReporter | ************************…

腾讯云coding代码托管平台配置问题公钥拉取失败提示 Permission denied(publickey)

前言 最近在学校有个课设多人开发一个游戏&#xff0c;要团队协作&#xff0c;选用了腾讯云的coding作为代码管理仓库&#xff0c;但在配置的时候遇到了一些问题&#xff0c;相比于github&#xff0c;发现腾讯的coding更难用&#xff0c;&#xff0c;&#xff0c;这里记录一下…

【漫画版】指挥官的排序战术:快速排序算法解密

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任字节跳动数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python&#xff0c;欢迎探讨交流 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题…

stm32单片机学习路线

第一步 编程及硬件基础知识 1.掌握C语言基础 作为STM32的主要编程语言&#xff0c;C语言的基础知识是必不可少的。建议通过书籍、在线课程或者教学视频系统地学习C语言的基础知识&#xff0c;包括语法、数据类型、函数、指针等。 2.了解电子电路基础 对于单片机开发来说&…

面向对象 03:类与对象的创建、初始化和使用,通过 new 关键字调用构造方法,以及创建对象过程的内存分析

一、前言 记录时间 [2024-05-10] 系列文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 11&#xff1a;Java 方法相关内容&#xff0c;方法的设计原则&#xff0c;以及方法的定义和调用 面向对象 01&#xff1a;Java 面向对…

ESP32引脚入门指南(四):从理论到实践(PWM)

引言 ESP32 作为物联网领域的明星微控制器&#xff0c;除了强大的Wi-Fi和蓝牙功能&#xff0c;还内置了丰富的外设资源&#xff0c;其中就包括高级的PWM&#xff08;脉冲宽度调制&#xff09;功能。本文将深入探讨ESP32的PWM引脚&#xff0c;解析其工作原理&#xff0c;并通过…

2024年数维杯B题完整代码和思路论文讲解与分析

2024数维杯数学建模完整代码和成品论文已更新&#xff0c;获取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/bgic2nbxs2h41pvt?singleDoc# 2024数维杯数学建模B题45页论文和代码已完成&#xff0c;代码为全部问题的代码 论文包括摘要、问题重述、问题分析、模型假设、…

G2 - 人脸图像生成(DCGAN)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 理论知识DCGAN原理 模型结构逻辑结构物理结构 模型实现前期准备1. 导入第三方库2. 修改随机种子(相同的随机种子&#xff0c;第i次随机的结果是固定的)3.…

Cocos creator实现《战机长空》关卡本地存储功能

Cocos creator实现《战机长空》关卡本地存储功能 Cocos creator在开放小游戏过程中&#xff0c;经常会出现设置关卡&#xff0c;这里记录一下关卡数据本地存储功能。 一、关卡设置数据 假如我们有关卡数据如下&#xff0c; let settings [ { level: 1, // 第1关 score: 0,…

SAM轻量化应用Auto-SAM、Group-Mix SAM、RAP-SAM、STLM

1. Auto SAM&#xff08;Auto-Prompting SAM for Mobile Friendly 3D Medical Image Segmentation&#xff09; 1.1 面临问题 医学背景&#xff1a; &#xff08;1&#xff09;与自然图像相比&#xff0c;医学图像的尺寸更小&#xff0c;形状不规则&#xff0c;对比度更低。&…

window10设置静态IP

右键桌面网络图标 点击属性 点击要查看的网络 点击详细信息 获得网络连接详细信息 右键WiFi符号 或者其他方式进入网络与internet中心 点击 WLAN 点击属性 点击编辑&#xff08;点击一个即可&#xff09; 选择手动将刚才的信息方进入即可 完成

多模态中的“单流模型”和“双流模型”

多模态预训练模型按照模型结构可以分为单流和双流两种结构。 单流是指图片和文本在embedding之后就融合在一起进入后续的transformer层。【先将信息fusion&#xff0c;然后再用一个model处理】双流是指文本和图片单独享有自己的transformer层&#xff0c;只在最后做轻量的融合…

VM虚拟机安装调试(步骤如下图)

VM虚拟机安装调试 随着一顿安装操作&#xff0c;还有enter键敲下&#xff0c;出现如下界面。

综述列表(~2024.05.10)

&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 每周末更新&#xff0c;完整版进群获取。 Q 群在群文件&#xff0c;VX 群每周末更新。

鲁教版六年级数学上册-笔记

文章目录 第一章 丰富的图形世界1 生活中的立体图形2 展开和折叠3 截一个几何体4 从三个方向看物体的形状 第二章 有理数及其运算1 有理数2 数轴3 绝对值4 有理数的加法5 有理数的减法6 有理数的加减混合运算7 有理数的乘法8 有理数的除法9 有理数的乘方10 科学计数法11 有理数…