嵌入式: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

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

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

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

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

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

    2024年02月16日
    浏览(60)
  • 嵌入式开发板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日
    浏览(95)
  • 【嵌入式Qt开发入门】如何使用Qt进行绘图——QPainter 绘图

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

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

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

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

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

    2024年02月12日
    浏览(45)
  • 【嵌入式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日
    浏览(65)
  • 【嵌入式Qt开发入门】Qt如何网络编程——获取本机的网络信息

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

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

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

    2024年02月11日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包