QT day5

这篇具有很好参考价值的文章主要介绍了QT day5。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

服务器:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //给服务器指针实例化对象
    server = new QTcpServer(this);
}

Widget::~Widget()
{
    delete ui;
}

//启动服务器按钮对应的槽函数
void Widget::on_pushButton_clicked()
{
    //获取ui界面上的端口号
    quint16 port = ui->lineEdit->text().toUInt();

    //将服务器设置成监听状态
    if(!server->listen(QHostAddress::Any, port))
    {
        QMessageBox::critical(this, "失败", "服务器启动失败");
        return;
    }
    else
    {
        QMessageBox::information(this, "成功", "服务器启动成功");
    }

    //此时表明服务器启动成功,并对客户端连接进行监听
    //如果有客户端向服务器发射连接请求,那么该服务器就会自动发射一个newConnection的信号
    connect(server, &QTcpServer::newConnection, this, &Widget::newConnection_slot);
}

//处理newConnection
void Widget::newConnection_slot()
{
    qDebug() << "有新的客户端发来连接请求了";

    //获取最新连接的客户端套接字
    QTcpSocket *s = server->nextPendingConnection();

    //将获取的套接字存放到客户端容器中
    clientlist.push_back(s);

    connect(s, &QTcpSocket::readyRead, this, &Widget::readyRead_slot);
}

void Widget::readyRead_slot()
{
    //删除客户端链表中无效的客户端套接字
    for(int i=0; i<clientlist.count(); i++)
    {
        //判断套接字的状态
       if(clientlist[i]->state() == 0)     //SocketState state() const
       {                                   //功能:返回客户端套接字的状态
          clientlist.removeAt(i);
       }                                   //返回值:客户端的状态,如果结果为0,表示未连接
    }

    //遍历所有客户端,查看是哪个客户端发来数据
    for(int i=0; i<clientlist.count(); i++)
    {
        if(clientlist[i]->bytesAvailable() != 0)
        {
            //读取当前客户端的相关数据
            QByteArray msg = clientlist[i]->readAll();

            //将数据展示到ui界面上
            ui->listWidget->addItem(QString::fromLocal8Bit(msg));

            //将接受的信息,发送给所有客户端
            for(int j=0; j<clientlist.count(); j++)
            {
                clientlist[j]->write(msg);
            }
        }
    }
}

客户端:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    socket = new  QTcpSocket(this);

    connect(socket, &QTcpSocket::connected, this, &Widget::connected_slot);

    //客户端与服务器连接成功后,服务器向客户端发来数据,那么客户端就会发射一个readyRead信号
    connect(socket, &QTcpSocket::readyRead, this, &Widget::readyRead_slot);

    connect(socket, &QTcpSocket::disconnected, this, &Widget::disconnected_slot);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_connectBtn_clicked()
{
    if(ui->connectBtn->text() == "连接服务器")
    {
        //获取ui界面信息
        Name = ui->userNameEdit->text();
        QString hostName = ui->ipEdit->text();
        quint16 port = ui->portEdit->text().toUInt();

        //连接到主机
        socket->connectToHost(hostName, port);

        //如果连接服务器成功,该客户端就会发射一个connected的信号

        ui->connectBtn->setText("断开服务器");
    }
    else if(ui->connectBtn->text() == "断开服务器")
    {
        QString msg = Name + ":拿手好戏后 离开聊天室";
        socket->write(msg.toLocal8Bit());

        //断开客户端与服务器的连接
        socket->disconnectFromHost();
        //当客户端与服务器断开,该客户端就会自动发送一个disconnected的信号

        ui->connectBtn->setText("连接服务器");
    }
}

//处理conneed信号的槽函数定义
void Widget::connected_slot()
{
    QMessageBox::information(this, "成功", "连接服务器成功");

    //顺便向服务器发送一条信息,说:***,进入聊天室
    QString msg = Name + ":带着power 进入聊天室";
    socket->write(msg.toLocal8Bit());
}


void Widget::readyRead_slot()
{
    QByteArray msg = socket->readAll();

    ui->msgList->addItem(QString::fromLocal8Bit(msg));
}


void Widget::on_sendBtn_clicked()
{
    //获取ui界面的编辑的文本
    QString m = ui->msgEdit->text();

    //整合要发送的信息
    QString msg = Name + ":" + m;

    //将信息发送给服务器
    socket->write(msg.toLocal8Bit());

    //发送后清空文本
    ui->msgEdit->clear();
}

void Widget::disconnected_slot()
{
    QMessageBox::information(this, "退出", "断开服务器");
}

思维导图:

QT day5,qt,命令模式,开发语言文章来源地址https://www.toymoban.com/news/detail-700640.html

到了这里,关于QT day5的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT支持多种开发语言

    QT主要是一个C++应用程序框架,但它也提供了对其他一些编程语言的官方或非官方支持。以下是QT支持的一些语言版本及其特点。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.Python (PyQt)  : PyQt是QT的官方Python绑定,允许Python开发者使用QT库来创建

    2024年04月29日
    浏览(49)
  • 粤嵌实习智能家居day5--基于6818开发板

    # 传感器数据的实时获取及实时显示     接线方式:         ARM板                    GY39         Vcc 接电源   ---------   Vcc         GND 接地     --------    GND         TX  发送数据线 --------   RX(DR)         Rx  接收数据线 --------   Tx(CT)         传感器和开发板的通信

    2024年02月11日
    浏览(39)
  • ARM--day5(C语言点灯实验、总线、串口通信信息、串口通讯协议)

      gpio.c: gpio.h: main.c:

    2024年02月12日
    浏览(40)
  • 【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 战斗背景:做了个串口接收界面,用来接收传输过来的信号。但是光用数字显示太单调,需要用图线显示出来。 战略目标:干掉它。 战术路线:Qt 绘图可以使用 Qt Charts,先了解

    2024年02月11日
    浏览(52)
  • 【VisualStudio】使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月10日
    浏览(77)
  • JavaWeb_瑞吉外卖_业务开发Day5-套餐管理, 短信发送, 手机验证码登录

    总结 接收List数据时, 需要加上 @RequestParam 注解 操作2个及2个以上表, 加上 @Transactional 事务注解, 保持数据的一致性. 发送短信 生成验证码 黑马程序员. 瑞吉外卖项目

    2024年02月12日
    浏览(37)
  • iTOP-RK3588开发板Ubuntu 系统交叉编译 Qt 工程-命令行交叉编译

    使用源码 rk3588_linux/buildroot/output/rockchip_rk3588/host/bin/qmake 交叉编译 QT 工程。 最后烧写编译好的 buildroot 镜像,将编译好的 QT 工程可执行程序在 buildroot 系统上运行。 交叉编译 QT 工程如下所示,首先进入 QLed 的工程目录下。 然后使用以下命令交叉编译 QT 工程,如下图所示:

    2024年02月13日
    浏览(42)
  • 【VisualStudio】基于 Visual Studio 使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月15日
    浏览(70)
  • 【Visual Studio】使用 C++ 语言,配合 Qt,开发了一个串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 我要使用的功能比较简单,主要包含扫描串口、打开串口、发送数据、接收数据、暂停按钮、停止按钮,因此接下里将围绕这几个功能依次更新。 我的工程项目名字叫 “GUI”。

    2024年02月11日
    浏览(71)
  • QT软件开发: 获取CPU序列号、硬盘序列号、主板序列号 (采用wmic命令)

    QT版本:   5.12.6 环境: win10 64位 编译器: MinGW 32 通过wmic 命令获取CPU序列号、硬盘序列号、主板序列号、CPU名称等信息。 做软件加密、数据加密、软件1机1码绑定的场合比较实用。 WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具) ,提供了从命令行接口和批命令脚本执行

    2024年02月07日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包