嵌入式:QT Day4

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

嵌入式:QT Day4,qt,开发语言

一、手动完成服务器的实现,并注释具体步骤

嵌入式:QT Day4,qt,开发语言

嵌入式:QT Day4,qt,开发语言

源码:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer>               //服务器类
#include <QTcpSocket>               //客户端类
#include <QMessageBox>              //对话框类
#include <QList>                    //链表容器
#include <QDebug>                   //信息调试类

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void newConnnecttion_slot();              //自定义槽函数,用来处理有客户端发送连接请求后,服务器自动发送的newConnecttion信号
    void readyRead_slot();                    //自定义槽函数,用来处理客户端要向客户端发送信息时,客户端自动发送的readyRead信号

private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;

    //定义服务器指针
    QTcpServer *server;
    //定义存储客户端套接字容器
    QList<QTcpSocket*> sockList;

};
#endif // WIDGET_H

widget.cpp

#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()
{
    //将行编辑器的内容赋值到port中
    quint16 port = ui->lineEdit->text().toUInt();

    //监听
    if(server->listen(QHostAddress::Any, port)){
        QMessageBox::information(this, "连接提示", "客户端连接成功!");
    }else{
        QMessageBox::information(this, "连接提示", "客户端连接失败!");
    }

    //此时服务器已经处于监听状态,如果有客户端发送连接请求,那么该服务器会自动发送newConnnecttion信号
    //我们可以将该信号连接到自定义的槽函数中,处理新套接字
    connect(server, &QTcpServer::newConnection, this, &Widget::newConnnecttion_slot);

}

void Widget::newConnnecttion_slot()
{
    //保存服务器接收到的客户端套接字指针
    QTcpSocket *s = server->nextPendingConnection();

    //将该套接字指针放到容器中
    sockList.push_back(s);

    //此时服务器与客户端已建立连接
    //如果客户端要向服务器发送信息,那么会发送一个readyRead信号
    //此时需要将该信号与自定义槽函数连接,读取客户端数据
    connect(s, &QTcpSocket::readyRead, this, &Widget::readyRead_slot);

}

void Widget::readyRead_slot(){
    //移除无效客户端
    for(int i = 0; i < sockList.count(); i++){      //sockList.count()  表示存储客户端套接字的容器内元素个数
        if(sockList.at(i)->state() == 0){           //state表示客户端的状态,是一个枚举值,=0表示该客户端已断开连接
            sockList.removeAt(i);                   //移除该客户端
        }
    }

    //遍历客户端容器,判断是哪个客户端有数据要读
    for(int i = 0; i < sockList.count(); i++){
        if(sockList.at(i)->bytesAvailable() != 0){      //表示该客户端有数据要读
            //读取该客户端发送的全部信息
            QByteArray msg = sockList.at(i)->readAll();

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

            //将该消息发送给所有客户端
            for(int i = 0; i < sockList.count(); i++){
                sockList.at(i)->write(msg);
            }
        }
    }
}

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

二、思维导图

嵌入式:QT Day4,qt,开发语言文章来源地址https://www.toymoban.com/news/detail-619411.html

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

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

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

相关文章

  • 嵌入式:ARM Day4

    嵌入式:ARM Day4

     源码:         在上述代码中,int *ptr定义了一个指向整数类型的指针ptr,(int *)将地址0x5000A28强制转换为整数类型的指针,后续可以通过*ptr访问与修改该地址空间中的值。  

    2024年02月12日
    浏览(16)
  • 嵌入式:C高级 Day4

    嵌入式:C高级 Day4

    冒泡排序 简单选择排序: 快速排序:

    2024年02月14日
    浏览(10)
  • 【嵌入式Qt开发入门】初识Qt——Linux下安装Qt

    【嵌入式Qt开发入门】初识Qt——Linux下安装Qt

            Qt 是一个跨平台的 C++开发库。主要用来开发图形用户界面(Graphical User Interface,简 称 GUI)程序。         Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部; Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多

    2024年02月16日
    浏览(46)
  • 嵌入式开发板qt gdb调试

    嵌入式开发板qt gdb调试

    1) 启动 gdbserver ssh 或者 telnet 登陆扬创平板 192.168.0.253, 进入命令行执行如下: chmod 777 /home/HelloWorld (2) 打 开 QTcreator-Debug-StartDebugging-Attach to Running Debug Server 进行如下设置,设置监听端口10000. 点击上图中的按钮,由于按钮中的函数设置了断点,则跳到断点,界面如下

    2024年02月04日
    浏览(15)
  • 【嵌入式Qt开发入门】如何使用Qt进行绘图——QPainter 绘图

    【嵌入式Qt开发入门】如何使用Qt进行绘图——QPainter 绘图

            绘图与图表在嵌入式里有的比较多,尤其是图表,我们常在股票里看到的“图表折线/曲线 图/饼状图等”都可以用 Qt 的图表来实现。绘图和图表的内容本章主要介绍绘图和图表的基本操作,以简单的例子呈现绘图与图表的用法,目的就是快速入门绘图与图表,关

    2024年02月12日
    浏览(16)
  • 嵌入式Qt 开发一个音乐播放器

    嵌入式Qt 开发一个音乐播放器

    上篇文章:RK3568源码编译与交叉编译环境搭建,进行了OK3568开发板软件开发环境搭建,通过编译RK3568的源码,可以得到Qt开发的交叉编译相关工具。 本篇,就来在搭建好的软件开发中,进行Qt软件的开发测试。由于Qt是支持跨平台的,因此本篇的音乐播放器,先在Windows上编写

    2024年02月02日
    浏览(25)
  • 【嵌入式Qt开发入门】如何使用Qt进行绘制实时图表——QChart 图表

    【嵌入式Qt开发入门】如何使用Qt进行绘制实时图表——QChart 图表

            要想使用 Qt Charts,我们的 Qt 版本得使用 Qt 5.7 之后的版本。其实 Qt Charts 并不是 Qt 5.7 才有的,是在 Qt 5.7 以前只有商业版本的 Qt 才有 Qt Charts。我们能免费下载的 Qt 版本都是社区(开源)版本。         Qt Charts 很方便的绘制我们常见的曲线图、折线图、柱状

    2024年02月12日
    浏览(15)
  • 【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本

    【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本

            在很多时候我们需要读写文本文件进行读写,比如写个 Mp3 音乐播放器需要读 Mp3 歌词里的文本,比如修改了一个 txt 文件后保存,就需要对这个文件进行读写操作。本文介绍简单的文本文件读写,内容精简,让大家了解文本读写的基本操作。         QFile 类提

    2024年02月12日
    浏览(15)
  • 【嵌入式Qt开发入门】Qt如何网络编程——获取本机的网络信息

    【嵌入式Qt开发入门】Qt如何网络编程——获取本机的网络信息

            Qt 网络模块为我们提供了编写TCP/IP客户端和服务器的类。它提供了较低级别的类,例如代表低级网络概念的 QTcpSocket,QTcpServer 和 QUdpSocket,以及诸如 QNetworkRequest, QNetworkReply 和 QNetworkAccessManager 之类的高级类来执行使用通用协议的网络操作。它 还提供了诸如QNet

    2024年02月16日
    浏览(15)
  • 【嵌入式Qt开发入门】在Ubuntu下编写C++

    【嵌入式Qt开发入门】在Ubuntu下编写C++

            在 Ubuntu 上面编写 C++,本文内容主要介绍在 Ubuntu 在终端窗口下使用 vi/vim 编辑一 个 C++源文件。通过编写最简单的示例“Hello,World!”。带领大家学习如何在 Ubuntu 终端下编辑和编译 C++。这里要求大家会在 Ubuntu 上使用 vi/vim,也就是要求大家有一点 Ubuntu 入门的基

    2024年02月11日
    浏览(11)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包