• QT DAY6


    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. socket = new QTcpSocket(this);
    9. //如果连接服务器成功,该客户端就会发射一个connected的信号。
    10. //我们可以将信号连接到自定义的槽函数中处理相关逻辑
    11. //由于该链接只需连接一次,所以卸载构造函数中即可
    12. connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);
    13. //客户端与服务器连接后,如果服务器想客户端发来数据,那么该客户端就会自动发送一个readRead信号
    14. //我们可以将该信号连接到自定义的槽函数中处理相关逻辑
    15. connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
    16. connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);
    17. }
    18. Widget::~Widget()
    19. {
    20. delete ui;
    21. }
    22. void Widget::on_connectBtn_clicked()
    23. {
    24. //获取ui界面的信息
    25. userName = ui -> usernameEdit -> text();
    26. QString hostName = ui -> ipEdit -> text();
    27. quint16 port = ui -> portEdit ->text().toUInt();
    28. //调用函数连接到主机
    29. socket -> connectToHost(hostName,port);
    30. ui ->ipEdit -> setEnabled(false);
    31. ui ->portEdit -> setEnabled(false);
    32. ui ->connectBtn -> setEnabled(false);
    33. ui ->usernameEdit -> setEnabled(false);
    34. }
    35. void Widget::connected_slot(){
    36. QMessageBox::information(this,"成功","连接服务器成功");
    37. QString msg = userName +"进入聊天室";
    38. socket -> write(msg.toLocal8Bit());
    39. }
    40. void Widget::readyRead_slot(){
    41. //读取该客户端信号对应槽函数的实现
    42. QByteArray msg = socket ->readAll();
    43. ui -> msgList -> addItem(QString::fromLocal8Bit(msg));
    44. }
    45. void Widget::on_sendBtn_clicked()
    46. {
    47. QString m = ui ->msgEdit ->text();
    48. QString msg = userName + ":"+m;
    49. socket -> write(msg.toLocal8Bit());
    50. ui -> msgEdit -> clear();
    51. }
    52. //断开服务器按钮对应的槽函数
    53. void Widget::on_disConnectBtn_clicked()
    54. {
    55. QString msg = userName + ":离开聊天室";
    56. socket -> write(msg.toLocal8Bit());
    57. //调用成员函数disconnectFromHost
    58. //功能:断开客户端与服务器的连接
    59. socket -> disconnectFromHost();
    60. //当客户端与服务器断开连接后,该客户端就会发射一个disconnected的信号
    61. //我们可以将该信号与自定义的槽函数连接
    62. ui ->ipEdit -> setEnabled(true);
    63. ui ->portEdit -> setEnabled(true);
    64. ui ->connectBtn -> setEnabled(true);
    65. ui ->usernameEdit -> setEnabled(true);
    66. }
    67. void Widget::disconnected_slot(){
    68. QMessageBox::information(this,"退出","断开成功");
    69. }

  • 相关阅读:
    Mac硬盘检测工具
    解析隐式类型转换操作operator double() const,带你了解隐式转换危害有多大
    Java操作Redis以及Redis线程池的用法
    最强Redis实战学习笔记,没有之一
    Spring MVC 框架学习(八)---- SSM 框架整合
    对比学习里面instance_loss的意义
    py14_Python 流程控制之简单认识 while/for 循环判断结构
    springboot+vue基于j2ee企业人力资源管理系统设计与实现(论文+项目源码)
    docker 部署 RabbitMQ
    Pyglet综合应用|推箱子游戏地图编辑器之图片跟随鼠标
  • 原文地址:https://blog.csdn.net/weixin_69028524/article/details/132678143