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.事件分发器,事件过滤器(重要程度:一般) event函数 2.文件操作(QFile) 实现功能:点击按钮,弹出对话框,并且用文件类读取出内容输出显示在控件上。 #include <QFi…...
智慧社区管理系统:打造便捷、安全、和谐的新型社区生态
项目背景 在信息化、智能化浪潮席卷全球的今天,人们对于生活品质的需求日益提升,期待居住环境能与科技深度融合,实现高效、舒适、安全的生活体验。在此背景下,智慧社区管理系统应运而生,旨在借助现代信息技术手段&…...
CustomTkinter:便捷美化Tkinter的UI界面(附模板)
CustomTkinter是一个基于Tkinter的Python用户界面库。 pip3 install customtkinter它提供了各种UI界面常见的小部件。这些小部件可以像正常的Tkinter小部件一样创建和使用,也可以与正常的Tkinter元素一起使用。 它的优势如下: CustomTkinter的小部件和…...
使用MicroPython和pyboard开发板(15):使用LCD和触摸传感器
使用LCD和触摸传感器 pybaord的pyb对LCD设备也进行了封装,可以使用官方的LCD显示屏。将LCD屏连接到开发板,连接后。 使用LCD 先用REPL来做个实验,在MicroPython提示符中输入以下指令。请确保LCD面板连接到pyboard的方式正确。 >>…...
c++20 std::jthread 源码简单赏析与应用
std::jthread 说明: std::jthread 是 C20 中引入的一个新特性,它是线程库中的一个类,专门用于处理 std::thread 与 std::stop_token 和 std::stop_source 之间的交互,以支持更优雅和安全的线程停止机制。 std::stop_source控制…...
自动化测试里的数据驱动和关键字驱动思路的理解
🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄须…...
【30天精通Prometheus:一站式监控实战指南】第6天:mysqld_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细
亲爱的读者们👋 欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀 Prometheus是云原生和DevOps的…...
浅析智能体开发(第二部分):智能体设计模式和软件架构
大语言模型(LLM)驱动的智能体(AI Agent)展现出许多传统软件所不具备的特征。不仅与传统软件的设计理念、方法、工具和技术栈有显著的差异,AI原生(AI Native)的智能体还融入了多种新概念和技术。…...
Unity学习笔记---Transform组件
组件介绍 Transform组件在每个游戏对象中都存在,且只存在一个。该组件保存了游戏对象的位置、平移、旋转、缩放等信息。 组件相关方法 //获取当前游戏对象的Transform组件this.transform; getObject.transform; GetComponent<Transform>();//属性 gameObje…...
springboot+jsp校园理发店美容美发店信息管理系统0h29g
前台管理:会员管理、会员预定、开单点单、收银结帐、技师提成 后台管理:数据维护、物料管理、数据查询、报表分析、系统设置等 灵活的付款方式,支持现金、挂帐、会员卡,同时支持多种折扣方式并可按用户要求设置多种结帐类型善的充值卡管理模块:支持优惠卡…...
css - sass or scss ?
总的来说,Sass 和 SCSS 提供的功能是一样的,选择哪种语法主要取决于你的个人或团队的偏好。...
html5 笔记01
01 表单类型和属性 input的type属性 单行文本框: typetext 电子邮箱 : typeemail 地址路径 : type url 定义用于输入数字的字段: typenumber 手机号码: typetel 搜索框 : typesearch 定义颜色选择器 : typecolor 滑块控件 : typerange 定义日期 :typedate 定义输入时间的控件…...
E5063A是德科技e5063a网络分析仪
181-2461-8938产品概述: 简 述: E5063A 是低成本网络分析仪,可提供优化的性能和功能,适用于测试简单的无源器件,例如天线、电缆、滤波器和 PCB 等。它利用工业标准 ENA 系列始终如一的测量架构,能够极…...
【星海随笔】微信小程序(二)
WXML 模板语法 - 数据绑定 在data中定义页面的数据 在页面对应的 .js 文件中,把数据定义到 data 对象中即可: 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 代码: use serde_json::{Result, Value};fn main() -> Result<()>{//构造json结构 cpu_loadlet data r#"{"…...
Linux 信号捕捉与处理
💓博主CSDN主页:麻辣韭菜💓 ⏩专栏分类:Linux知识分享⏪ 🚚代码仓库:Linux代码练习🚚 🌹关注我🫵带你学习更多Linux知识 🔝 目录 前言 1. 信号的处理时机 1.1用户…...
桂林电子科技大学计算机工程学院、广西北部湾大学计信学院莅临泰迪智能科技参观交流
5月18日,桂林电子科技大学计算机工程学院副院长刘利民、副书记杨美娜、毕业班辅导员黄秀娟、广西北部湾大学计信学院院长助理刘秀平莅临广东泰迪智能科技股份有限公司产教融合实训基地参观交流。泰迪智能科技副总经理施兴、广西分公司郑廷和、梁霜、培训业务部孙学镂…...
Qt笔记:动态处理多个按钮点击事件以更新UI
问题描述 在开发Qt应用程序时,经常需要处理多个按钮的点击事件,并根据点击的按钮来更新用户界面(UI),如下图。例如,你可能有一个包含多个按钮的界面,每个按钮都与一个文本框和一个复选框相关联…...
Excel模板计算得出表格看板
背景 表格看板及导出,单元格时间年是根据筛选器时间变化的 较往年和往年是计算单元格 思路 1.通过excel模板来把数据填入excel再数据清洗得到数据返回前端 2.数据填充,通过行列作为key 列如:key整体20241月,根据key匹配数据填…...
FPGA+DSP异构核心板在工业控制与数据采集中的应用与开发指南
1. 项目概述:为什么选择FPGADSP异构核心板?在工业控制、伺服驱动、光伏逆变这些对实时性和算力要求都极高的领域里,选型一块合适的核心板往往是项目成败的第一步。过去,我们可能需要在“高灵活性的FPGA”和“高主频的通用处理器”…...
CircuitJS1 Desktop Mod终极指南:开启离线电路仿真新纪元
CircuitJS1 Desktop Mod终极指南:开启离线电路仿真新纪元 【免费下载链接】circuitjs1 Standalone (offline) version of the Circuit Simulator with small modifications based on modified NW.js. 项目地址: https://gitcode.com/gh_mirrors/circ/circuitjs1 …...
通过Taotoken CLI工具一键配置多开发环境接入参数
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken CLI工具一键配置多开发环境接入参数 在接入大模型服务时,开发者常常需要为不同的开发工具(如…...
SAM优化原理与PyTorch实战:从尖锐度抑制到泛化能力提升
1. 项目概述:当“找最低点”升级为“找最稳的洼地”你有没有试过调参调到凌晨三点,模型在训练集上准确率飙到99.8%,一跑验证集直接掉到72%?那种看着loss曲线一路俯冲、心里却越来越慌的感觉,我太熟了——就像精心搭好一…...
ESP32外部中断防抖实战:用MicroPython搞定按键误触,附完整消抖代码
ESP32外部中断防抖实战:用MicroPython搞定按键误触,附完整消抖代码 当你按下ESP32开发板上的按键时,是否遇到过LED灯莫名其妙闪烁多次?或者智能家居设备偶尔会误触发某个功能?这些"灵异事件"的罪魁祸首&…...
AMD Ryzen终极调优实战:SMUDebugTool免费工具完整配置指南
AMD Ryzen终极调优实战:SMUDebugTool免费工具完整配置指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…...
0522晨间日记
# 0522晨间日记 - 关键词 - 上午- 过站的问题- 昨天有一个产品卡在母子码绑定了- 早晨的各类菜单没有同步,不知道怎么做。- 最终明确是: 因为一个产品对应2种的条码导致的卡住了- 需要在条码规则上增加多个检查对应的- 总结- 最近一周西门子遇到的问题- …...
LangGraph 实战:如何实现 Human-in-the-Loop(人机协同)工作流
LangGraph实战:从零构建生产级Human-in-the-Loop人机协同工作流 副标题:含中断/人工审核/分支路由全场景实现,覆盖金融/法律/企业服务90%+通用场景 第一部分:引言与基础 1.1 摘要/引言 你有没有遇到过这些场景: 用大模型做合同自动审核,结果模型漏判了关键合规条款,直…...
从零讲透 Agent 智能体:不只是大模型,而是“会干活的 AI”
一、为什么突然都在聊 Agent?过去两年,大模型(LLM)火了,但大家很快发现一个问题:大模型只会“说”,不会“做”。它可以回答问题、写代码、写文章,但一旦涉及:连续多步任务…...
快马AI生成高性能JMeter压测脚本的核心原理与实战
1. 这不是“又一个AI写脚本工具”,而是压测工程师终于能睡整觉的转折点快马AI、JMeter、一键生成高性能测试脚本——这三个词凑在一起,很多老压测人第一反应是皱眉:又来个包装成“智能”的模板填充器?我亲手调过37版登录接口的Thi…...
