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

  • 相关阅读:
    finereport报表制作总结:每页既有页内合计,又有总合计,包含解决页合计,总合计最后一页重复的问题
    为什么运营Youtube要用住宅ISP代理?
    【微服务部署】04-ForwardedHeaders
    a股level2数据接口的最优委托信息
    学习笔记(9)JavaScript元素、节点
    js判断对象是否为空
    〖全域运营实战白宝书 - 运营角色认知篇⑧〗- 运营人的发展路径
    【数据结构】——双链表(增删查改)
    二十五、Java 封装
    力扣leetcode 850. 矩形面积 II 【困难】
  • 原文地址:https://blog.csdn.net/weixin_69028524/article/details/132678143