【0904作业】QT 完成登陆界面跳转到聊天室+完成学生管理系统的查找和删除功能

一、完成登陆界面跳转到聊天室

1> 项目结构

2> 源码

① .pro

②main

#include "mywnd.h"
#include"chatCli.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MyWnd w;w.show();Form f;QObject::connect(&w, &MyWnd::jump,&f,&Form::jump_slot);return a.exec();
}

③ mywnd.h

#ifndef MYWND_H
#define MYWND_H#include <QWidget>
#include<QDebug>
#include<QString>
#include<QMessageBox>QT_BEGIN_NAMESPACE
namespace Ui { class MyWnd; }
QT_END_NAMESPACEclass MyWnd : public QWidget
{Q_OBJECTsignals:void jump();  //跳转界面的自定义信号函数   //jump是在头文件中自定义的信号函数public slots:void login_slot();    //登陆界面的自定义的槽函数public:MyWnd(QWidget *parent = nullptr);~MyWnd();private:Ui::MyWnd *ui;
};
#endif // MYWND_H

④ mywnd.cpp

#include "mywnd.h"
#include "ui_mywnd.h"MyWnd::MyWnd(QWidget *parent): QWidget(parent), ui(new Ui::MyWnd)
{ui->setupUi(this);//更改窗口标题this->setWindowTitle("MyQQ");//更改窗口图标this->setWindowIcon(QIcon(":/icon/wodepeizhenshi.png"));//更改logo图ui->logoLab->setPixmap(QPixmap(":/icon/logo.png"));ui->logoLab->setScaledContents(true);                //设置内容自适应//更改 账号和密码labui->userNameLab->setPixmap(QPixmap(":/icon/userName.jpg"));ui->userNameLab->setScaledContents(true);ui->pwdLab->setPixmap(QPixmap(":/icon/passwd.jpg"));ui->pwdLab->setScaledContents(true);//设置账户和密码editui->userNameEdit->setPlaceholderText("QQ/邮箱/手机");ui->pwdEdit->setPlaceholderText("密码");ui->pwdEdit->setEchoMode(QLineEdit::Password);//对按钮设置图标ui->loginBtn->setIcon(QIcon(":/icon/login.png"));ui->cancelBtn->setIcon(QIcon(":/icon/cancel.png"));//将登录按钮连接到自定义的槽函数中connect(ui->loginBtn,&QPushButton::clicked,this,&MyWnd::login_slot);//将取消按钮连接到自定义的槽函数中connect(ui->cancelBtn,SIGNAL(pressed()),this,SLOT(close()));}MyWnd::~MyWnd()   //析构函数的定义
{delete ui;    //释放ui指针的内存
}void MyWnd::login_slot()
{QString username = ui->userNameEdit->text();QString pwd = ui->pwdEdit->text();if(username == "admin" && pwd == "123456"){qDebug()<<"登录成功";QMessageBox box(QMessageBox::Information,"提示","登录成功",QMessageBox::Yes,this);int ret = box.exec();if(ret == QMessageBox::Yes){emit jump();this->close();}}else{qDebug()<<"登录失败";//静态成员函数版本对话框实现,无需实例化对象,直接调用静态成员函数即可(函数名自带Icon)int ret = QMessageBox::question(this,"问题","账号密码不匹配,是否重新登录!?",         //对话框中文本内容QMessageBox::Yes|QMessageBox::No,   //提供的按钮QMessageBox::Yes);                  //默认选中的按钮//对用户点击的按钮进行判断if(ret == QMessageBox::Yes){ui->pwdEdit->clear();  //清楚密码框内容}else{this->close();         //关闭本界面}}
}

⑤ charCli.h

#ifndef FORM_H
#define FORM_H#include <QWidget>
#include <QDebug>
#include <QTcpServer>
#include <QTcpSocket>
#include <QMessageBox>namespace Ui {
class Form;
}class Form : public QWidget
{Q_OBJECTpublic:explicit Form(QWidget *parent = nullptr);~Form();public slots:void jump_slot();    //跳转界面的自定义的槽函数void on_connectBtn_clicked();void connected_slot();         //自定义处理connected信号的槽函数void readyRead_slot();         //自定义处理readyRead信号的槽函数void disconnected_slot();      //自定义处理disconnected信号的槽函数void on_disConnectBtn_clicked();void on_sendBtn_clicked();private:Ui::Form *ui;QTcpSocket * socket;  //定义一个客户端指针QString username;         //将用户名设置为类中的私有成员,以便槽函数访问
};#endif // FORM_H

⑥ charCli.cpp

#include "chatCli.h"
#include "ui_chatCli.h"Form::Form(QWidget *parent) :QWidget(parent),ui(new Ui::Form)
{ui->setupUi(this);//将发送区域的组件设置为不可用状态ui->sendBtn->setEnabled(false);ui->msgEdit->setEnabled(false);ui->disConnectBtn->setEnabled(false);//实例化客户端指针socket = new QTcpSocket(this);  //此刻就有一个客户端了//如果连接服务器成功,那么该客户端就会自动发射一个connected信号,我们可以将信号连接到槽函数中处理相关逻辑connect(socket,&QTcpSocket::connected,this,&Form::connected_slot);//如果服务器向客户端发送了数据,那么客户端会自动发起一个readyRead信号,我们可以将信号连接到槽函数中处理相关逻辑connect(socket,&QTcpSocket::readyRead,this,&Form::readyRead_slot);//如果成功断开与服务器的连接,那么该套接字就会自动发射一个disconnected的信号connect(socket,&QTcpSocket::disconnected,this,&Form::disconnected_slot);
}Form::~Form()
{delete ui;
}void Form::jump_slot()
{this->show();
}//连接服务器按钮对应的槽函数
void Form::on_connectBtn_clicked()
{//获取ui界面中的信息  connrctToHost参数1username = ui->userNameEdit->text();QString ip = ui->ipEdit->text();quint16 port = ui->portEidt->text().toUInt();//调用connectToHost函数连接服务器socket->connectToHost(ip,port);//如果连接服务器成功,那么该客户端就会自动发射一个connected信号,我们可以将信号连接到槽函数中处理相关逻辑//connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);
}//自定义处理connected信号的槽函数
void Form::connected_slot()
{//设置组件的可用状态ui->msgEdit->setEnabled(true);ui->sendBtn->setEnabled(true);ui->disConnectBtn->setEnabled(true);ui->userNameEdit->setEnabled(false);ui->ipEdit->setEnabled(false);ui->portEidt->setEnabled(false);ui->connectBtn->setEnabled(false);QString msg = username + ":已进入聊天室"; //准备数据发送给服务器socket->write(msg.toLocal8Bit());       //将数据写入socket套接字
}//自定义处理readyRead信号的槽函数
void Form::readyRead_slot()
{QByteArray msg = socket->readAll();                 //读取所有套接字中的数据ui->msgList->addItem(QString::fromLocal8Bit(msg));  //将数据展示在ui界面
}//自定义发送按钮的槽函数
void Form::on_sendBtn_clicked()
{QString m = ui->msgEdit->text();    //获取要发送的信息QString msg = username + ":" + m;  //整合要发送给服务器的数据socket->write(msg.toLocal8Bit());   //write的数据应该为QByteArray的,QString类型可以使用toLocal8Bit转换成QByteArray类型ui->msgEdit->clear();               //清空发送框的数据
}//自定义断开服务器按钮的
void Form::on_disConnectBtn_clicked()
{QString msg = username + ":已离开聊天室";socket->write(msg.toLocal8Bit());socket->disconnectFromHost();
}//自定义处理disconnected信号的槽函数
void Form::disconnected_slot()
{QMessageBox::information(this,"退出","退出聊天室");//设置组件的可用状态ui->msgEdit->setEnabled(false);ui->sendBtn->setEnabled(false);ui->disConnectBtn->setEnabled(false);ui->userNameEdit->setEnabled(true);ui->ipEdit->setEnabled(true);ui->portEidt->setEnabled(true);ui->connectBtn->setEnabled(true);
}

3> 效果展示

二、学生管理系统的查找和删除功能

//查找按钮对应的槽函数
void Widget::on_serachBtn_clicked()
{//清空信息ui->tableWidget->clear();//1、获取ui界面的信息(学号、姓名)int numb_ui = ui->numbEdit->text().toUInt();QString name_ui = ui->nameEdit->text();//2、判断是否有漏填数据if(numb_ui == 0 || name_ui.isEmpty()){QMessageBox::information(this,"提示","请将查询信息补充完整");return;}//3、准备sql语句QString sql = QString("select * from myTable WHERE numb = '%1' AND name = '%2'").arg(numb_ui).arg(name_ui);qDebug()<<sql;//4、实例化一个执行者QSqlQuery querry;if(!querry.exec(sql)){QMessageBox::information(this,"失败","查找失败");return;}
//    if(!querry.next())
//    {
//        QMessageBox::information(this,"失败","查找失败,无匹配数据");
//        return;
//    }int i = 0;//5、遍历查找到的数据,并将数据填充到ui界面中while(querry.next()){for(int j = 0 ;j<querry.record().count()-1;j++){ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));}}
}//删除按钮对应的槽函数
void Widget::on_deleteBtn_clicked()
{//清空信息ui->tableWidget->clear();//1、从ui界面获取信息(学号、姓名)int numb_ui = ui->numbEdit->text().toUInt();QString name_ui = ui->nameEdit->text();//2、判断数据是否漏填if(numb_ui == 0 || name_ui.isEmpty()){QMessageBox::information(this,"提示","请将删除信息补充完整");return;}//3、准备sql语句QString sql = QString("delete from myTable WHERE numb = '%1' AND name = '%2'").arg(numb_ui).arg(name_ui);//4、实例化一个执行者QSqlQuery querry;if(!querry.exec(sql)){QMessageBox::information(this,"失败","删除失败");return;}else{QMessageBox::information(this,"成功","删除成功");}
}

1> 效果展示

 查找

  

删除

  

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

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

相关文章

Lite transformer

图片以及思想来源请参考论文 Lite Transformer with Long-Short Range Attention 瓶颈结构&#xff08;bottleneck&#xff09;是否真的有效 注意力机制被广泛应用在诸多领域&#xff0c;包括自然语言处理&#xff0c;图像处理和视频处理。它通过计算所有输入元素的点积来建模…

低代码平台:IVX 重新定义编程

目录 &#x1f36c;一、写在前面 &#x1f36c;二、低代码平台是什么 &#x1f36c;三、为什么程序员和技术管理者不太可能接受“低代码”平台&#xff1f; &#x1f36d;1、不安全&#xff08;锁定特性&#xff09; &#x1f36d;2、不信任 &#x1f36c;四、IVX低代码平台 &a…

《阿里巴巴 Java 开发手册》(一)命名风格

《阿里巴巴 Java 开发手册》 一、编程规约(一)命名风格(二)常量定义(三)代码格式 一、编程规约 (一)命名风格 (二)常量定义 (三)代码格式

LabVIEW开发感应电机在线匝间短路故障诊断系统

LabVIEW开发感应电机在线匝间短路故障诊断系统 工业中使用的超过85%的电动机是三相感应电动机。它们因其可靠性、设计便利性、高性能和过载能力而被广泛用于不同的应用&#xff0c;例如制造、加工、电力系统、运输等。无论它们的能力如何&#xff0c;它们都被认为是现代工业学…

Unity通过偏移UV播放序列帧动画

大家好&#xff0c;我是阿赵。   在Unity引擎里面用shader播放序列图&#xff0c;估计很多人都有用到了&#xff0c;我自己而已写过好几个版本。这里大概介绍一下。 一、原理 先说目的&#xff0c;我现在有一张这样的图片&#xff1a; 这张图片上面&#xff0c;有9个格子&a…

使用errors.Wrapf()代替log.Error()

介绍不同语言的错误处理机制: Error handling patterns[1] Musings about error handling mechanisms in programming languages[2] 项目中 main调func1&#xff0c;func1调取func2... 这样就会出现很多的 if err ! nil { log.Printf()} , 在Kibana上查看时会搜到多条日志, 需要…

美妆+七人拼团模式:如何打造新型社交电商营销方式

美妆是一个充满竞争和创新的行业&#xff0c;要想在市场上获得优势&#xff0c;就需要不断寻找新的营销方式&#xff0c;吸引和留住消费者。七人拼团模式就是一种结合了社交电商和拼购玩法的新型商业模式&#xff0c;它可以利用社交网络的裂变效应&#xff0c;增加品牌曝光度和…

vue+elementUI el-select 自定义搜索逻辑(filter-method)

下拉列表的默认搜索是搜索label显示label,我司要求输入id显示label名称 <el-form-item label"部门&#xff1a;"><el-select v-model"form.region1" placeholder"请选择部门" filterable clearable:filter-method"dataFilter&qu…

AndroidTV端:酒店扫码认证投屏DLNA

被老板叼了几次了&#xff0c;最近实在忍不了&#xff0c;准备离职&#xff1b; 但是担心离职后长时间没有办法找到工作 就想贡献一套平时琢磨出来的程序&#xff0c;请各位有能力的话带我熬过这凛冽的寒冬。 目前写出来的&#xff0c;有三个端&#xff1a;安卓TV端&#xf…

准备HarmonyOS开发环境

引言 在开始 HarmonyOS 开发之前&#xff0c;需要准备好开发环境。本章将详细指导你如何安装 HarmonyOS SDK、配置开发环境、创建 HarmonyOS 项目。 目录 安装 HarmonyOS SDK 配置开发环境 创建 HarmonyOS 项目 总结 1. 安装 HarmonyOS SDK HarmonyOS SDK 是开发 Harmo…

【Selenium2+python】自动化unittest生成测试报告

前言 批量执行完用例后&#xff0c;生成的测试报告是文本形式的&#xff0c;不够直观&#xff0c;为了更好的展示测试报告&#xff0c;最好是生成HTML格式的。 unittest里面是不能生成html格式报告的&#xff0c;需要导入一个第三方的模块&#xff1a;HTMLTestRunner 一、导…

leetcode1288. 删除被覆盖区间(java)

删除被覆盖区间 题目描述贪心法代码演示 题目描述 难度 - 中等 leetcode1288. 删除被覆盖区间 给你一个区间列表&#xff0c;请你删除列表中被其他区间所覆盖的区间。 只有当 c < a 且 b < d 时&#xff0c;我们才认为区间 [a,b) 被区间 [c,d) 覆盖。 在完成所有删除操作…

Docker使用数据卷挂载进行数据存储与共享

一、挂载和数据卷 在 Docker 中&#xff0c;挂载&#xff08;Mounting&#xff09;和数据卷&#xff08;Data Volumes&#xff09;是用于在容器和宿主机之间共享数据的机制。 挂载&#xff1a;将宿主机文件系统中的目录或文件与容器中的目录或文件进行关联的过程。数据卷&…

收入下降,亏损扩大,利润率急剧恶化,蔚来仍充满风险

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 蔚来第二季度财报分析 猛兽财经从蔚来&#xff08;NIO&#xff09;2023年第二季度财报中&#xff0c;获得的最大收获并不是该公司的收入下降或亏损扩大&#xff0c;而是由于价格竞争加剧&#xff0c;中国电动汽车行业整体上…

什么是安全运营中心(SOC),应该了解什么

安全运营中心&#xff08;SOC&#xff09; 是一种企业监视和警报设施&#xff0c;可帮助组织检测安全威胁、监视安全事件和分析性能数据以改进公司运营。 什么是安全运营中心&#xff08;SOC&#xff09; 安全运营中心&#xff08;SOC&#xff09;是一个中央监视和监视中心&a…

第二次作业

1.编写脚本for1.sh,使用for循环创建20账户&#xff0c;账户名前缀由用户从键盘输入&#xff0c;账户初始密码由用户输入&#xff0c;例如: test1、test2、test3、.....、 test10 编写脚本for1.sh 执行脚本&#xff1a;bash for.sh 2&#xff0c;编写脚本for2.sh,使用for循环,通…

模糊测试面面观 | 模糊测试是如何发现异常情况的?

协议模糊测试是一种用于评估通信协议、文件格式和API实现系统安全性和稳定性的关键技术。在模糊测试过程中&#xff0c;监视器扮演着关键角色&#xff0c;它们能够捕获异常情况、错误响应、资源利用等&#xff0c;为测试人员提供有价值的信息&#xff0c;有助于发现潜在漏洞和问…

ceph Monitor原理和代码流程介绍

Monitor介绍 Monitor在Ceph集群中扮演管理者的角色&#xff0c;维护了整个集群的状态&#xff0c;集群的状态被抽象成几个Map对象&#xff0c;包括monmap、osdmap、mdsmap、authmap、logmap等&#xff0c;保证集群的相关组件在同一时刻能够达成一致&#xff0c;相当于领导层。…

el-dialog设置高度、使用resetFields清除表单项无效问题

初学者容易踩坑的的el-dialog、el-form问题 1. el-dialog设置高度2. el-form中表单项对不齐3. 使用resetFields清除表单项无效 1. el-dialog设置高度 在el-dialog中里面添加一个div设置固定高度&#xff0c;或者限制最小的高度。 <el-dialogtitle"选择图标"v-mod…

附录1-爬虫的一些技巧

目录 1 寻找url与显示内容的关系 2 修改请求头 3 局部刷新 4 阅读返回信息 5 多尝试页面其他的使用方式 6 尝试不同类型参数 7 表单类型的post多用data发&#xff0c;接口类型的post多用json发 8 消除degger 9 你在浏览器上看到的html与你下载下来的html不一…