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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bclinux基于欧拉(BigCloud Enterprise Linux For Euler)下安装mysql5.7

第一步&#xff1a;下载mysql5.7的rpm安装包 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 第二步&#xff1a;上传mysql安装包到Centos7的下 第三步&#xff1a;检查是否已经安装了mysql或者mariadb&#xff08;centos7默认安装&#xff09;&#xff0c;如已…

Python 渗透测试:GhostScript 沙箱绕过.(CVE-2018-16509)

什么是 GhostScript 沙箱绕过 GhostScript 沙箱是一种安全机制,用于在受控环境中运行 GhostScript 解释器,以防止恶意代码的执行。GhostScript 是一个广泛使用的 PDF 和 PostScript 解释器,通常用于在服务器上处理和渲染这些文件格式。Tavis Ormandy 通过公开邮件列表&#xf…

《网关微服务技术架构:构建高效可扩展的服务网关》

随着微服务架构的流行&#xff0c;网关微服务作为微服务架构中的重要组成部分&#xff0c;扮演着连接客户端与后端微服务的关键角色。本文将深入探讨网关微服务的技术架构设计与实现&#xff0c;以及如何构建高效可扩展的服务网关。 ### 1. 网关微服务的作用与意义 网关微服务…

iptables防火墙【☆】

一、防火墙的基础 防火墙分为硬件防火墙和软件防火墙&#xff0c;硬件防火墙有专门的设备&#xff1a;如国产华为、绿盟等&#xff0c;作为网关层做地址转换等安全防护。很多公司基本都会使用硬件防火墙做第一道防御&#xff0c;在核心业务上再添加软件防火墙提高安全性能…

IP地址概述和配置

一.IP地址的概述 在计算机网络中&#xff0c;连接的网络设备和计算机都有唯一的地址&#xff0c;以此作为该计算机在internet中的唯一标识。 二.IP地址的定义 IP地址&#xff08;internet protocol Address&#xff0c;网络协议地址&#xff09;是用于表示网络节点的逻辑地址…

智能科技的新风潮:探索Web3与物联网结合

引言 随着科技的不断进步和创新&#xff0c;智能科技正成为新时代的主旋律。在这个充满活力和变革的时代&#xff0c;Web3技术与物联网的结合成为了一股新的风潮。本文将深入探讨这一新趋势&#xff0c;揭示Web3与物联网结合的意义、挑战和前景。 Web3技术的特点与优势 区块链…

Docker compose 的方式一键部署夜莺

官方安装文档&#xff1a;https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v7/install/docker-compose/ 介绍&#xff1a;夜莺监控是一款开源云原生观测分析工具&#xff0c;采用 All-in-One 的设计理念&#xff0c;集数据采集、可视化、监控告警、数据分析…

Go语言(Golang)的开发框架

在Go语言&#xff08;Golang&#xff09;的开发中&#xff0c;有多种开发框架可供选择&#xff0c;它们各自具有不同的特点和优势。以下是一些流行的Go语言开发框架&#xff0c;选择Go语言的开发框架时&#xff0c;需要考虑项目需求、团队熟悉度、社区支持、框架性能和可维护性…

3d选择模型后不能旋转什么原因?怎么解决?---模大狮模型网

在3D建模和渲染的过程中&#xff0c;旋转模型是常见的操作。然而&#xff0c;有时在选择了模型后&#xff0c;却发现无法进行旋转&#xff0c;这可能会让许多用户感到困扰。本文将探讨3D选择模型后不能旋转的可能原因&#xff0c;并提供相应的解决方法。 一、3D选择模型后不能旋…

若依nodejs版本过高问题解决方案

由于nodejs版本过高,可能会导致vue-cli项目运行报错。 目录 方法1:每次启动项目前,输入配置命令 方法2:修改package.js

react中样式的书写

在 React 中&#xff0c;你可以使用 className 来指定一个 CSS 的 class。它与 HTML 的 class 属性的工作方式相同&#xff1a; <img className"avatar" /> 然后&#xff0c;你可以在一个单独的 CSS 文件中为它编写 CSS 规则&#xff1a; .avatar {border-rad…

如何使用WindowsSpyBlocker防止Windows系统被恶意监控和跟踪

关于WindowsSpyBlocker WindowsSpyBlocker是一款功能强大的Windows系统安全防护工具&#xff0c;该工具基于Go语言开发&#xff0c;WindowsSpyBlocker以一个单独的可执行程序发布&#xff0c;可以帮助广大用户防止自己的Windows系统被恶意监控和跟踪。 WindowsSpyBlocker能够利…

SpringCloud(1)-Eureka相关配置

1.新建Module-注册中心 作为注册中心 1.1配置 pom.xml <!-- 引入 eureka-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency&g…

ASP+ACCESS基于BS产品销售管理系统

2. 网页制作工具 a) 网页设计工具 网页主要使用Frontpage2003&#xff0c;Dreamweaver Mx辅助制作。 Frontpage 2003 frontpage2003是在frontpage2000基础上的网页工具。frontpage2003保留和发展了frontpage 2000的优秀功能&#xff0c;并根据用户的的要求再次增加了九大新…

如何用PLC监听消防系统485总线通讯获取火灾报警数据

本文由艺捷自动化编写&#xff0c;艺捷自动化旗下产品有艺捷自动化网站和易为二维码说明书小程序&#xff08;微信&#xff09; 前言&#xff0c;先来说一下为什么会有这么一个奇怪的应用。在一个自动化系统改造升级项目中&#xff0c;甲方要求把消防的画面加到他们的后台上。…

word如何按照原本页面审阅文档

1 视图-阅读视图 2 视图&#xff0c;自己看&#xff0c;懒得打字了哈哈

vulhub——ActiveMQ漏洞

文章目录 一、CVE-2015-5254(反序列化漏洞)二、CVE-2016-3088&#xff08;任意文件写入漏洞&#xff09;2.1 漏洞原理2.2 写入webshell2.3 写入crontab 三、CVE-2022-41678&#xff08;远程代码执行漏洞&#xff09;方法一方法2 四、CVE-2023-46604&#xff08;反序列化命令执行…

升级版网创教程wordpress插件自动采集并发布

主要功能&#xff1a; wordpress 插件主题系列支持自动采集并发布。 主要采集: 福缘&#xff0c;中创&#xff0c;冒泡 自动采集各大项目网进行整合发布到自己个人网站 插件话更新&#xff0c;减少网络请求&#xff0c;提升稳定性 代码完美开源 傻瓜式操作&#xff0c;一…

【MySQL】MySQL的安装和基本概念

MySQL的安装和基本概念 一、环境安装1、环境及配置2、下载安装 二、基本概念1、主流数据库2、mysql和mysqld的区别和概念&#xff08;1&#xff09;概念1&#xff1a;了解CS结构&#xff08;2&#xff09;概念2&#xff1a;数据库指的是什么&#xff08;3&#xff09;概念3&…

【Linux】:进程切换

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux进程切换的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精…