• 10.4号作业


    Qt实现客户端搭建的代码和现象

    widget.h

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. QT_BEGIN_NAMESPACE
    7. namespace Ui { class Widget; }
    8. QT_END_NAMESPACE
    9. class Widget : public QWidget
    10. {
    11. Q_OBJECT
    12. public:
    13. Widget(QWidget *parent = nullptr);
    14. ~Widget();
    15. private slots:
    16. void on_connectButton_clicked();
    17. //自定义处理connected信号的槽函数的声明
    18. void connected_slot();
    19. //自定义处理readyRead信号的槽函数的声明
    20. void readyRead_slot();
    21. //自定义处理disconnected信号的槽函数的声明
    22. void disconnected_slot();
    23. void on_sendButton_clicked();
    24. void on_disconnectButton_clicked();
    25. private:
    26. Ui::Widget *ui;
    27. //定义客户端指针
    28. QTcpSocket *socket;
    29. //定义字符串接受用户
    30. QString userName;
    31. };
    32. #endif // WIDGET_H

    main.cpp

    1. #include "widget.h"
    2. #include
    3. int main(int argc, char *argv[])
    4. {
    5. QApplication a(argc, argv);
    6. Widget w;
    7. w.show();
    8. return a.exec();
    9. }

    widget.cpp

    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. //给客户端指针实例化对象
    9. socket=new QTcpSocket(this);
    10. //此时,已经向服务器发送连接请求了,如果成功连接服务器,那么该客户端就会自动发射一个connected的信号
    11. //我们可以将该信号连接到自定义的槽函数中处理逻辑
    12. //由于只需要连接一次,所以将连接写在构造函数中
    13. connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);
    14. //如果服务器向客户端发来消息,那么该客户端就会自动发射一个readyRead信号
    15. //我们可以将该进行连接到自定义的槽函数中处理相关逻辑
    16. connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
    17. //当成功与服务器断开连接后,该客户端会自动发射一个disconnected的信号
    18. //我们可以将该信号连接到自定义的槽函数中处理相关逻辑
    19. //由于该连接只需连接一次即可,所以放在构造函数中进行
    20. connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);
    21. }
    22. Widget::~Widget()
    23. {
    24. delete ui;
    25. }
    26. //连接服务器对应的槽函数
    27. void Widget::on_connectButton_clicked()
    28. {
    29. //获取ui界面上的相关信息
    30. userName=ui->nameEdit->text(); //获取用户名
    31. QString ip=ui->ipEdit->text(); //主机地址
    32. quint16 port=ui->portEdit->text().toUInt(); //端口号
    33. //函数原型:virtual void connectToHost(const QHostAddress &address, quint16 port);
    34. //功能:将客户端连接到给定的服务器
    35. //参数1:服务器的主机地址
    36. //参数2:端口号
    37. //返回值:无
    38. socket->connectToHost(ip,port);
    39. //此时,已经向服务器发送连接请求了,如果成功连接服务器,那么该客户端就会自动发射一个connected的信号
    40. //我们可以将该信号连接到自定义的槽函数中处理逻辑
    41. //由于只需要连接一次,所以将连接写在构造函数中
    42. }
    43. //处理connected信号的槽函数的定义
    44. void Widget::connected_slot()
    45. {
    46. QMessageBox::information(this,"成功","你已经成功进入聊天室");
    47. //
    48. QString msg=userName +":进入聊天室";
    49. socket->write(msg.toLocal8Bit());
    50. }
    51. //处理readyRead信号的槽函数的定义
    52. void Widget::readyRead_slot()
    53. {
    54. //读取套接字中的信息
    55. QByteArray msg=socket->readAll();
    56. //
    57. ui->msgWidget->addItem(QString::fromLocal8Bit(msg));
    58. }
    59. //发送按钮对应的槽函数
    60. void Widget::on_sendButton_clicked()
    61. {
    62. //获取ui界面输入的内容
    63. QString msg=userName+":"+ui->msgEdit->text();
    64. //发送给服务器
    65. socket->write(msg.toLocal8Bit());
    66. //清空编辑框内容
    67. ui->msgEdit->clear();
    68. }
    69. //断开服务器
    70. void Widget::on_disconnectButton_clicked()
    71. {
    72. QString msg=userName+": 我走了";
    73. socket->write(msg.toLocal8Bit());
    74. //断开连接
    75. socket->disconnectFromHost();
    76. //当成功与服务器断开连接后,该客户端会自动发射一个disconnected的信号
    77. //我们可以将该信号连接到自定义的槽函数中处理相关逻辑
    78. //由于该连接只需连接一次即可,所以放在构造函数中进行
    79. }
    80. void Widget::disconnected_slot()
    81. {
    82. QMessageBox::information(this,"提示","退出成功");
    83. }

  • 相关阅读:
    Prometheus+Grafana对Mysql实现监控
    远距离双目视觉测量系统纵深方向测量精度较低原因分析
    Xilinx MIPI CSI-2 Receiver Subsystem IP详解
    Ubuntu 20.04 DNS解析原理, 解决resolv.conf被覆盖问题
    山石网科等级保护培训笔记
    第七章《Java的异常处理》第2节:异常的分类及处理方法
    【算法】滑动窗口题单——2.不定长滑动窗口(求最长/最大)
    云原生核心技术(一文搞懂云原生)
    es_04
    C++重载运算符
  • 原文地址:https://blog.csdn.net/weixin_56612097/article/details/133484167