• 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. }

  • 相关阅读:
    非关系型数据库(NOSQL)和关系型数据库(SQL)区别详解
    重生之 SpringBoot3 入门保姆级学习(22、场景整合 Swagger 接口文档)
    情人节---快来学习一下程序员的专属浪漫吧
    必看,关于sql的慢查询及解决方案
    Selenium中WebDriver最新Chrome驱动安装教程
    sql语句查询数据库字段和表字段数量
    2022年8月深圳CPDA数据分析师认证报名
    数字图像处理(十二)最大熵算法
    CPU乱序执行基础 —— Tomasulo算法及执行过程
    计算机毕业设计php_thinkphp_vue的校园论坛网站
  • 原文地址:https://blog.csdn.net/weixin_69028524/article/details/132678143