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


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

    1> 项目结构

    2> 源码

    ① .pro

    ②main

    1. #include "mywnd.h"
    2. #include"chatCli.h"
    3. #include
    4. int main(int argc, char *argv[])
    5. {
    6. QApplication a(argc, argv);
    7. MyWnd w;
    8. w.show();
    9. Form f;
    10. QObject::connect(&w, &MyWnd::jump,&f,&Form::jump_slot);
    11. return a.exec();
    12. }

    ③ mywnd.h

    1. #ifndef MYWND_H
    2. #define MYWND_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. QT_BEGIN_NAMESPACE
    8. namespace Ui { class MyWnd; }
    9. QT_END_NAMESPACE
    10. class MyWnd : public QWidget
    11. {
    12. Q_OBJECT
    13. signals:
    14. void jump(); //跳转界面的自定义信号函数 //jump是在头文件中自定义的信号函数
    15. public slots:
    16. void login_slot(); //登陆界面的自定义的槽函数
    17. public:
    18. MyWnd(QWidget *parent = nullptr);
    19. ~MyWnd();
    20. private:
    21. Ui::MyWnd *ui;
    22. };
    23. #endif // MYWND_H

    ④ mywnd.cpp

    1. #include "mywnd.h"
    2. #include "ui_mywnd.h"
    3. MyWnd::MyWnd(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::MyWnd)
    6. {
    7. ui->setupUi(this);
    8. //更改窗口标题
    9. this->setWindowTitle("MyQQ");
    10. //更改窗口图标
    11. this->setWindowIcon(QIcon(":/icon/wodepeizhenshi.png"));
    12. //更改logo图
    13. ui->logoLab->setPixmap(QPixmap(":/icon/logo.png"));
    14. ui->logoLab->setScaledContents(true); //设置内容自适应
    15. //更改 账号和密码lab
    16. ui->userNameLab->setPixmap(QPixmap(":/icon/userName.jpg"));
    17. ui->userNameLab->setScaledContents(true);
    18. ui->pwdLab->setPixmap(QPixmap(":/icon/passwd.jpg"));
    19. ui->pwdLab->setScaledContents(true);
    20. //设置账户和密码edit
    21. ui->userNameEdit->setPlaceholderText("QQ/邮箱/手机");
    22. ui->pwdEdit->setPlaceholderText("密码");
    23. ui->pwdEdit->setEchoMode(QLineEdit::Password);
    24. //对按钮设置图标
    25. ui->loginBtn->setIcon(QIcon(":/icon/login.png"));
    26. ui->cancelBtn->setIcon(QIcon(":/icon/cancel.png"));
    27. //将登录按钮连接到自定义的槽函数中
    28. connect(ui->loginBtn,&QPushButton::clicked,this,&MyWnd::login_slot);
    29. //将取消按钮连接到自定义的槽函数中
    30. connect(ui->cancelBtn,SIGNAL(pressed()),this,SLOT(close()));
    31. }
    32. MyWnd::~MyWnd() //析构函数的定义
    33. {
    34. delete ui; //释放ui指针的内存
    35. }
    36. void MyWnd::login_slot()
    37. {
    38. QString username = ui->userNameEdit->text();
    39. QString pwd = ui->pwdEdit->text();
    40. if(username == "admin" && pwd == "123456")
    41. {
    42. qDebug()<<"登录成功";
    43. QMessageBox box(QMessageBox::Information,"提示","登录成功",QMessageBox::Yes,this);
    44. int ret = box.exec();
    45. if(ret == QMessageBox::Yes)
    46. {
    47. emit jump();
    48. this->close();
    49. }
    50. }
    51. else
    52. {
    53. qDebug()<<"登录失败";
    54. //静态成员函数版本对话框实现,无需实例化对象,直接调用静态成员函数即可(函数名自带Icon)
    55. int ret = QMessageBox::question(this,"问题","账号密码不匹配,是否重新登录!?", //对话框中文本内容
    56. QMessageBox::Yes|QMessageBox::No, //提供的按钮
    57. QMessageBox::Yes); //默认选中的按钮
    58. //对用户点击的按钮进行判断
    59. if(ret == QMessageBox::Yes)
    60. {
    61. ui->pwdEdit->clear(); //清楚密码框内容
    62. }
    63. else
    64. {
    65. this->close(); //关闭本界面
    66. }
    67. }
    68. }

    ⑤ charCli.h

    1. #ifndef FORM_H
    2. #define FORM_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. namespace Ui {
    9. class Form;
    10. }
    11. class Form : public QWidget
    12. {
    13. Q_OBJECT
    14. public:
    15. explicit Form(QWidget *parent = nullptr);
    16. ~Form();
    17. public slots:
    18. void jump_slot(); //跳转界面的自定义的槽函数
    19. void on_connectBtn_clicked();
    20. void connected_slot(); //自定义处理connected信号的槽函数
    21. void readyRead_slot(); //自定义处理readyRead信号的槽函数
    22. void disconnected_slot(); //自定义处理disconnected信号的槽函数
    23. void on_disConnectBtn_clicked();
    24. void on_sendBtn_clicked();
    25. private:
    26. Ui::Form *ui;
    27. QTcpSocket * socket; //定义一个客户端指针
    28. QString username; //将用户名设置为类中的私有成员,以便槽函数访问
    29. };
    30. #endif // FORM_H

    ⑥ charCli.cpp

    1. #include "chatCli.h"
    2. #include "ui_chatCli.h"
    3. Form::Form(QWidget *parent) :
    4. QWidget(parent),
    5. ui(new Ui::Form)
    6. {
    7. ui->setupUi(this);
    8. //将发送区域的组件设置为不可用状态
    9. ui->sendBtn->setEnabled(false);
    10. ui->msgEdit->setEnabled(false);
    11. ui->disConnectBtn->setEnabled(false);
    12. //实例化客户端指针
    13. socket = new QTcpSocket(this); //此刻就有一个客户端了
    14. //如果连接服务器成功,那么该客户端就会自动发射一个connected信号,我们可以将信号连接到槽函数中处理相关逻辑
    15. connect(socket,&QTcpSocket::connected,this,&Form::connected_slot);
    16. //如果服务器向客户端发送了数据,那么客户端会自动发起一个readyRead信号,我们可以将信号连接到槽函数中处理相关逻辑
    17. connect(socket,&QTcpSocket::readyRead,this,&Form::readyRead_slot);
    18. //如果成功断开与服务器的连接,那么该套接字就会自动发射一个disconnected的信号
    19. connect(socket,&QTcpSocket::disconnected,this,&Form::disconnected_slot);
    20. }
    21. Form::~Form()
    22. {
    23. delete ui;
    24. }
    25. void Form::jump_slot()
    26. {
    27. this->show();
    28. }
    29. //连接服务器按钮对应的槽函数
    30. void Form::on_connectBtn_clicked()
    31. {
    32. //获取ui界面中的信息 connrctToHost参数1
    33. username = ui->userNameEdit->text();
    34. QString ip = ui->ipEdit->text();
    35. quint16 port = ui->portEidt->text().toUInt();
    36. //调用connectToHost函数连接服务器
    37. socket->connectToHost(ip,port);
    38. //如果连接服务器成功,那么该客户端就会自动发射一个connected信号,我们可以将信号连接到槽函数中处理相关逻辑
    39. //connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);
    40. }
    41. //自定义处理connected信号的槽函数
    42. void Form::connected_slot()
    43. {
    44. //设置组件的可用状态
    45. ui->msgEdit->setEnabled(true);
    46. ui->sendBtn->setEnabled(true);
    47. ui->disConnectBtn->setEnabled(true);
    48. ui->userNameEdit->setEnabled(false);
    49. ui->ipEdit->setEnabled(false);
    50. ui->portEidt->setEnabled(false);
    51. ui->connectBtn->setEnabled(false);
    52. QString msg = username + ":已进入聊天室"; //准备数据发送给服务器
    53. socket->write(msg.toLocal8Bit()); //将数据写入socket套接字
    54. }
    55. //自定义处理readyRead信号的槽函数
    56. void Form::readyRead_slot()
    57. {
    58. QByteArray msg = socket->readAll(); //读取所有套接字中的数据
    59. ui->msgList->addItem(QString::fromLocal8Bit(msg)); //将数据展示在ui界面
    60. }
    61. //自定义发送按钮的槽函数
    62. void Form::on_sendBtn_clicked()
    63. {
    64. QString m = ui->msgEdit->text(); //获取要发送的信息
    65. QString msg = username + ":" + m; //整合要发送给服务器的数据
    66. socket->write(msg.toLocal8Bit()); //write的数据应该为QByteArray的,QString类型可以使用toLocal8Bit转换成QByteArray类型
    67. ui->msgEdit->clear(); //清空发送框的数据
    68. }
    69. //自定义断开服务器按钮的
    70. void Form::on_disConnectBtn_clicked()
    71. {
    72. QString msg = username + ":已离开聊天室";
    73. socket->write(msg.toLocal8Bit());
    74. socket->disconnectFromHost();
    75. }
    76. //自定义处理disconnected信号的槽函数
    77. void Form::disconnected_slot()
    78. {
    79. QMessageBox::information(this,"退出","退出聊天室");
    80. //设置组件的可用状态
    81. ui->msgEdit->setEnabled(false);
    82. ui->sendBtn->setEnabled(false);
    83. ui->disConnectBtn->setEnabled(false);
    84. ui->userNameEdit->setEnabled(true);
    85. ui->ipEdit->setEnabled(true);
    86. ui->portEidt->setEnabled(true);
    87. ui->connectBtn->setEnabled(true);
    88. }

    3> 效果展示

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

    1. //查找按钮对应的槽函数
    2. void Widget::on_serachBtn_clicked()
    3. {
    4. //清空信息
    5. ui->tableWidget->clear();
    6. //1、获取ui界面的信息(学号、姓名)
    7. int numb_ui = ui->numbEdit->text().toUInt();
    8. QString name_ui = ui->nameEdit->text();
    9. //2、判断是否有漏填数据
    10. if(numb_ui == 0 || name_ui.isEmpty())
    11. {
    12. QMessageBox::information(this,"提示","请将查询信息补充完整");
    13. return;
    14. }
    15. //3、准备sql语句
    16. QString sql = QString("select * from myTable WHERE numb = '%1' AND name = '%2'").arg(numb_ui).arg(name_ui);
    17. qDebug()<
    18. //4、实例化一个执行者
    19. QSqlQuery querry;
    20. if(!querry.exec(sql))
    21. {
    22. QMessageBox::information(this,"失败","查找失败");
    23. return;
    24. }
    25. // if(!querry.next())
    26. // {
    27. // QMessageBox::information(this,"失败","查找失败,无匹配数据");
    28. // return;
    29. // }
    30. int i = 0;
    31. //5、遍历查找到的数据,并将数据填充到ui界面中
    32. while(querry.next())
    33. {
    34. for(int j = 0 ;jrecord().count()-1;j++)
    35. {
    36. ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
    37. }
    38. }
    39. }
    40. //删除按钮对应的槽函数
    41. void Widget::on_deleteBtn_clicked()
    42. {
    43. //清空信息
    44. ui->tableWidget->clear();
    45. //1、从ui界面获取信息(学号、姓名)
    46. int numb_ui = ui->numbEdit->text().toUInt();
    47. QString name_ui = ui->nameEdit->text();
    48. //2、判断数据是否漏填
    49. if(numb_ui == 0 || name_ui.isEmpty())
    50. {
    51. QMessageBox::information(this,"提示","请将删除信息补充完整");
    52. return;
    53. }
    54. //3、准备sql语句
    55. QString sql = QString("delete from myTable WHERE numb = '%1' AND name = '%2'").arg(numb_ui).arg(name_ui);
    56. //4、实例化一个执行者
    57. QSqlQuery querry;
    58. if(!querry.exec(sql))
    59. {
    60. QMessageBox::information(this,"失败","删除失败");
    61. return;
    62. }
    63. else
    64. {
    65. QMessageBox::information(this,"成功","删除成功");
    66. }
    67. }

    1> 效果展示

     查找

      

    删除

      

  • 相关阅读:
    TIOBE 12月榜单: C# 即将成为2023 年度编程语言
    dgl安装教程
    gee引擎修改UI界面图文教程
    kafka的基本介绍【博学谷学习记录】
    为什么刀具数据库无法打开?
    LeetCode 1302. 层数最深叶子节点的和
    线性代数 --- 向量的长度
    关于浏览器Devtools的open,close监听
    Mac软件打开提示:已损坏,无法打开。您应该将它移到废纸娄 怎么解决?
    Nginx+Tomcat负载均衡、动静分离集群
  • 原文地址:https://blog.csdn.net/Smallxu_/article/details/132676142