当前位置: 首页 > news >正文

QT7_视频知识点笔记_4_文件操作,Socket通信:TCP/UDP

1.事件分发器,事件过滤器(重要程度:一般)

event函数

2.文件操作(QFile)

实现功能:点击按钮,弹出对话框,并且用文件类读取出内容输出显示在控件上。

#include <QFile>
#include <QFileDialog>
#include <QMessageBox>...
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{//注意如果编译器不进行自动提示,1.看编译器是否有问题(本电脑MinGW-32不进行提示,MinGW-64正常,可能有配置没配对。2.看项目生成的地方,取消对应编译器shadow bulid的勾选)ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,this,[=](){QString filename = QFileDialog::getOpenFileName(this,"open file","D:\\");if(filename.isEmpty() == true){QMessageBox::warning(this,"warning","select file faild!");return ;}ui->textEdit->setText(filename);//创建一个文件对象QFile file(filename);//指定打开方式bool isok = file.open(QFile::ReadOnly);if(!isok){QMessageBox::warning(this,"warning","file open faild!");return ;}//读文件,readAll返回QByteArray类型QByteArray array = file.readAll();//readAll是全部读完,或者也可以一行一行读
//        while(file.atEnd() == false){
//            array += file.readLine();
//        }//显示到文本框ui->textEdit->setText(array);//ui->textEdit->append();   //追加file.close();});}

注意:可以用QTextCodec类改编码格式,使显示在UI控件上的不出现乱码

写文件:

		//写文件//创建一个文件对象QFile file1("D:/testnew.txt");//指定打开方式bool isok1 = file1.open(QFile::Append);//举例三种写入文件的调用方式file1.write(QString("Hello").toUtf8());char buf[128] = {0} ;file1.write(buf,strlen(buf));file1.write(buf);file1.close();
2.文件流操作

QTextStream操作的数据类型:文本流:基础数据类型:int,float,string等类型

        //使用流对象(方式1)QTextStreamQTextStream steam(&file1);      //设置IO设备给流对象,file1为上文的QFile文件//写文件steam<<QString("hello,steam")<<123456;      //建议读出的时候不要采用"<<"符号,遇到空格就自动结束读取file1.close();QString buff1;file1.open(QFile::ReadOnly);steam.setDevice(&file1);steam>>buff1;   //把buff1写到流对象中去(文件中)qDebug()<<buff1.toUtf8().data();file1.close();

QDataStream操作的数据类型:数据流:二进制:QImage,QPoint QRect 不依耐平台

        //使用流对象(方式2)QDataStreamQFile file1("D:/testnew.txt");QDataStream ds(&file1);//写ds<<QString("hello,steam")<<123456;file1.close();QString buff1;int num;    //与QTextStream的区别在此,需要与存入的数据格式完全一样file1.open(QFile::ReadOnly);ds.setDevice(&file1);//读ds>>buff1>>num;   //把内容写入到buff1中qDebug()<<buff1.toUtf8().data()<<num;
        //区别2:还可以对内存进行操作//例如传递图片信息QImage image("D:\\myheart.png");QByteArray aaaa;QDataStream ss(&aaaa,QIODevice::ReadWrite);ss<<image;
2.文件属性的类:QFileInfo

可查看很多文件的信息,例如大小,修改事件等。可在帮助文档中查看相关信息。

#include <QFileInfo>
#include <QDateTime>QFileInfo file_info("D:/testnew.txt");qDebug()<<"file size = "<<file_info.size();qDebug()<<"file path = "<<file_info.filePath();qDebug()<<"modify data:"<<file_info.lastModified().toString("yyyy/MM/dd hh:mm:ss");
Socket通信:TCP/UDP(TCPIP部分)

最后能实现一个服务器一个客户端能相互传输文件等。

例子:创建一个项目,有两个顶层窗口,一个是服务器(需要连接QTcpServer和QTcpSocket),一个是客户端(只需要连接QTcpSocket)

服务器:QTcpServer进行监听,QTcpSocket进行通信
服务器1.server绑定(IP,port);2.server进入监听状态listen;3.Server收到信号newConnection(),socket套接字nextPendingConnection;4.socket套接字发送/接收数据:write函数 readAll函数(readyRead信号)

//QT  pro文件中:(加入network)
QT       += core gui network   
//.h文件中
#include <QTcpServer>
#include <QTcpSocket>QTcpServer* server;     //监听的套接字QTcpSocket* conn;    //通信的套接字

Server::Server(QWidget *parent): QWidget(parent), ui(new Ui::Server)
{ui->setupUi(this);//TCPserver实例化server = new QTcpServer(this);  //指定父对象,窗口释放也会被随之释放ui->S_IP->setText("127.0.0.1");ui->S_port->setText("9999");//监听server->listen(QHostAddress(ui->S_IP->text()),ui->S_port->text().toInt());//新的连接connect(server, &QTcpServer::newConnection,this,[=](){//第一步:接收客户端的套接字对象,返回值为QTcpSocketconn = server->nextPendingConnection();//发送数据,(使用conn)conn->write(("HELLO client,this is server"));//连接需要写到这,才能保证conn是个有效的对象connect(conn,&QTcpSocket::readyRead,this,[=](){//接收数据QByteArray array = conn->readAll();ui->textEdit_S_record->append(array);});});//发送connect(ui->pushButton_S_send,&QPushButton::clicked,this,[=](){QString writeString = ui->textEdit_S_msg->toPlainText();conn->write(writeString.toUtf8());  //格式转换ui->textEdit_S_record->append("My say:"+ui->textEdit_S_msg->toPlainText());//clearui->textEdit_S_msg->clear();});}

客户端:

#include <QTcpSocket>
...
QTcpSocket * client;

Client::Client(QWidget *parent) :QWidget(parent),ui(new Ui::Client)
{ui->setupUi(this);ui->C_IP->setText("127.0.0.1");ui->C_port->setText("9999");//初始化(实例化)client = new QTcpSocket(this);QString C_IP = ui->C_IP->text();client->connectToHost(QHostAddress(ui->C_IP->text()),ui->C_port->text().toInt());//client->connectToHost("127.0.0.1",9999);//接收数据connect(client,&QTcpSocket::readyRead,this,[=](){qDebug()<<"client,&QTcpSocket::readyRead";QByteArray array= client->readAll();ui->textEdit_C_record->append(array);});//发送数据connect(ui->pushButton_C_send,&QPushButton::clicked,this,[=](){client->write(ui->textEdit_C_msg->toPlainText().toUtf8());ui->textEdit_C_record->append("Me say:" + ui->textEdit_C_msg->toPlainText());});}

最后在main文件中:
加入两窗口同时显示:

int main(int argc, char *argv[])
{QApplication a(argc, argv);Server w;w.setWindowTitle("Server");w.show();Client c;c.setWindowTitle("Client");c.show();return a.exec();
}

最后的效果:
在这里插入图片描述

Socket通信:TCP/UDP(UDP部分)

UDP:面向无连接
对于UDP没有客户端和服务器之分,程序上来看都是一样的,都使用QUdpSocket
发送数据:writeDatagrame()
发送:指定对方的IP,对方的端口,发送的数据
接收数据:如果有信号发过来,收到信号:readyRead
需要绑定端口(本地):readatagrame()

int  size = s.pendingDatagramSize();
QByteArray array(size,0);
s.readDatagram(buf.data(),size);
//如果要接收数据,则要绑定端口(本地)
QT pro文件添加network
广播和组播

广播地址:255.255.255.255
组播地址:需要设置(如果需要接收组播消息,需要加入到组播地址,join)

相关文章:

QT7_视频知识点笔记_4_文件操作,Socket通信:TCP/UDP

1.事件分发器&#xff0c;事件过滤器&#xff08;重要程度&#xff1a;一般&#xff09; event函数 2.文件操作&#xff08;QFile&#xff09; 实现功能&#xff1a;点击按钮&#xff0c;弹出对话框&#xff0c;并且用文件类读取出内容输出显示在控件上。 #include <QFi…...

智慧社区管理系统:打造便捷、安全、和谐的新型社区生态

项目背景 在信息化、智能化浪潮席卷全球的今天&#xff0c;人们对于生活品质的需求日益提升&#xff0c;期待居住环境能与科技深度融合&#xff0c;实现高效、舒适、安全的生活体验。在此背景下&#xff0c;智慧社区管理系统应运而生&#xff0c;旨在借助现代信息技术手段&…...

CustomTkinter:便捷美化Tkinter的UI界面(附模板)

CustomTkinter是一个基于Tkinter的Python用户界面库。 pip3 install customtkinter它提供了各种UI界面常见的小部件。这些小部件可以像正常的Tkinter小部件一样创建和使用&#xff0c;也可以与正常的Tkinter元素一起使用。 它的优势如下&#xff1a; CustomTkinter的小部件和…...

使用MicroPython和pyboard开发板(15):使用LCD和触摸传感器

使用LCD和触摸传感器 pybaord的pyb对LCD设备也进行了封装&#xff0c;可以使用官方的LCD显示屏。将LCD屏连接到开发板&#xff0c;连接后。 使用LCD 先用REPL来做个实验&#xff0c;在MicroPython提示符中输入以下指令。请确保LCD面板连接到pyboard的方式正确。 >>…...

c++20 std::jthread 源码简单赏析与应用

std::jthread 说明&#xff1a; std::jthread 是 C20 中引入的一个新特性&#xff0c;它是线程库中的一个类&#xff0c;专门用于处理 std::thread 与 std::stop_token 和 std::stop_source 之间的交互&#xff0c;以支持更优雅和安全的线程停止机制。 std::stop_source控制…...

自动化测试里的数据驱动和关键字驱动思路的理解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 初次接触自动化测试时&#xff0c;对数据驱动和关键字驱动不甚理解&#xff0c;觉得有点故弄玄须…...

【30天精通Prometheus:一站式监控实战指南】第6天:mysqld_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们&#x1f44b;   欢迎加入【30天精通Prometheus】专栏&#xff01;&#x1f4da; 在这里&#xff0c;我们将探索Prometheus的强大功能&#xff0c;并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。&#x1f680;   Prometheus是云原生和DevOps的…...

浅析智能体开发(第二部分):智能体设计模式和软件架构

大语言模型&#xff08;LLM&#xff09;驱动的智能体&#xff08;AI Agent&#xff09;展现出许多传统软件所不具备的特征。不仅与传统软件的设计理念、方法、工具和技术栈有显著的差异&#xff0c;AI原生&#xff08;AI Native&#xff09;的智能体还融入了多种新概念和技术。…...

Unity学习笔记---Transform组件

组件介绍 Transform组件在每个游戏对象中都存在&#xff0c;且只存在一个。该组件保存了游戏对象的位置、平移、旋转、缩放等信息。 组件相关方法 //获取当前游戏对象的Transform组件this.transform; getObject.transform; GetComponent<Transform>();//属性 gameObje…...

springboot+jsp校园理发店美容美发店信息管理系统0h29g

前台管理:会员管理、会员预定、开单点单、收银结帐、技师提成 后台管理:数据维护、物料管理、数据查询、报表分析、系统设置等 灵活的付款方式&#xff0c;支持现金、挂帐、会员卡&#xff0c;同时支持多种折扣方式并可按用户要求设置多种结帐类型善的充值卡管理模块:支持优惠卡…...

css - sass or scss ?

总的来说&#xff0c;Sass 和 SCSS 提供的功能是一样的&#xff0c;选择哪种语法主要取决于你的个人或团队的偏好。...

html5 笔记01

01 表单类型和属性 input的type属性 单行文本框: typetext 电子邮箱 : typeemail 地址路径 : type url 定义用于输入数字的字段: typenumber 手机号码: typetel 搜索框 : typesearch 定义颜色选择器 : typecolor 滑块控件 : typerange 定义日期 :typedate 定义输入时间的控件…...

E5063A是德科技e5063a网络分析仪

181-2461-8938产品概述&#xff1a; 简  述&#xff1a; E5063A 是低成本网络分析仪&#xff0c;可提供优化的性能和功能&#xff0c;适用于测试简单的无源器件&#xff0c;例如天线、电缆、滤波器和 PCB 等。它利用工业标准 ENA 系列始终如一的测量架构&#xff0c;能够极…...

【星海随笔】微信小程序(二)

WXML 模板语法 - 数据绑定 在data中定义页面的数据 在页面对应的 .js 文件中&#xff0c;把数据定义到 data 对象中即可&#xff1a; Page({data: {// 字符串类型的数据info: init data,// 数据类型的数据msgList: [{msg: hello},{msg: world}]} })Mustache 语法的格式 把 …...

Python采集安居客租房信息

Python采集安居客租房信息 一、需求介绍二、完整代码一、需求介绍 本次采集的需求就是获取到页面中的所有信息: 将数据采集好之后保存为如下csv文件: 爬取的流程不再展开分析,完整代码附后。 二、完整代码 import csvimport requests from lxml import etreeclass Anju…...

Rust构造JSON和解析JSON

目录 一、Rust构造JSON和解析JSON 二、知识点 serde_json JSON 一、Rust构造JSON和解析JSON 添加依赖项 cargo add serde-json 代码&#xff1a; use serde_json::{Result, Value};fn main() -> Result<()>{//构造json结构 cpu_loadlet data r#"{"…...

Linux 信号捕捉与处理

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; ​ 目录 前言 1. 信号的处理时机 1.1用户…...

桂林电子科技大学计算机工程学院、广西北部湾大学计信学院莅临泰迪智能科技参观交流

5月18日&#xff0c;桂林电子科技大学计算机工程学院副院长刘利民、副书记杨美娜、毕业班辅导员黄秀娟、广西北部湾大学计信学院院长助理刘秀平莅临广东泰迪智能科技股份有限公司产教融合实训基地参观交流。泰迪智能科技副总经理施兴、广西分公司郑廷和、梁霜、培训业务部孙学镂…...

Qt笔记:动态处理多个按钮点击事件以更新UI

问题描述 在开发Qt应用程序时&#xff0c;经常需要处理多个按钮的点击事件&#xff0c;并根据点击的按钮来更新用户界面&#xff08;UI&#xff09;&#xff0c;如下图。例如&#xff0c;你可能有一个包含多个按钮的界面&#xff0c;每个按钮都与一个文本框和一个复选框相关联…...

Excel模板计算得出表格看板

背景 表格看板及导出&#xff0c;单元格时间年是根据筛选器时间变化的 较往年和往年是计算单元格 思路 1.通过excel模板来把数据填入excel再数据清洗得到数据返回前端 2.数据填充&#xff0c;通过行列作为key 列如&#xff1a;key整体20241月&#xff0c;根据key匹配数据填…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...