Qt 文本文件读写与保存
Qt 文本文件读写与保存
开发工具:VS2013 + QT5.8

设计UI界面,如下图所示

sample7_1QFile.h 头文件:
#pragma once#include <QtWidgets/QMainWindow>
#include "ui_sample7_1QFile.h"class sample7_1QFile : public QMainWindow
{Q_OBJECTpublic:sample7_1QFile(QWidget *parent = Q_NULLPTR);private:Ui::sample7_1QFileClass ui;private:bool openTextByIODevice(const QString& aFileName);bool saveTextByIODevice(const QString& aFileName);bool openTextByStream(const QString& aFileName);bool saveTextByStream(const QString& aFileName);private slots:void on_actOpen_IODevice_triggered();void on_actOpen_TextStream_triggered();void on_actSave_IODevice_triggered();void on_actSave_TextStream_triggered();};
sample7_1QFile.cpp 文件
#include "sample7_1QFile.h"#include <QDir>
#include <QFileDialog>
#include <QTextStream>
#include <QTextDocument>
#include <QTextBlock>//解决QT中中文显示乱码问题
#pragma execution_character_set("utf-8")sample7_1QFile::sample7_1QFile(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);this->setCentralWidget(ui.tabWidget);
}//用IODevice方式打开文本文件
bool sample7_1QFile::openTextByIODevice(const QString &aFileName)
{QFile aFile(aFileName);//aFile.setFileName(aFileName);if (!aFile.exists()) //文件不存在return false;if (!aFile.open(QIODevice::ReadOnly | QIODevice::Text))return false;ui.textEditDevice->setPlainText(aFile.readAll());//ui.textEditDevice->clear();//while (!aFile.atEnd())//{// QByteArray line = aFile.readLine();//自动添加 \n// QString str=QString::fromLocal8Bit(line); //从字节数组转换为字符串// str.truncate(str.length()-1); //去除结尾增加的空行// ui.textEditDevice->appendPlainText(str);//}aFile.close();ui.tabWidget->setCurrentIndex(0);return true;
}//用 QTextStream打开文本文件
bool sample7_1QFile::openTextByStream(const QString &aFileName)
{ QFile aFile(aFileName);if (!aFile.exists()) //文件不存在return false;if (!aFile.open(QIODevice::ReadOnly | QIODevice::Text))return false;QTextStream aStream(&aFile); //用文本流读取文件 aStream.setAutoDetectUnicode(true); //自动检测Unicode,才能正常显示文档内的汉字//ui.textEditStream->setPlainText(aStream.readAll());//读取全部内容//ui->textEditStream->clear();//清空//while (!aStream.atEnd())//{// str=aStream.readLine();//读取文件的一行// ui->textEditStream->appendPlainText(str); //添加到文本框显示//}aFile.close();//关闭文件ui.tabWidget->setCurrentIndex(1);return true;
}//用IODevice方式保存文本文件
bool sample7_1QFile::saveTextByIODevice(const QString &aFileName)
{ QFile aFile(aFileName);//aFile.setFileName(aFileName);if (!aFile.open(QIODevice::WriteOnly | QIODevice::Text))return false;QString str = ui.textEditDevice->toPlainText();//整个内容作为字符串QByteArray strBytes = str.toUtf8();//转换为字节数组//QByteArray strBytes=str.toLocal8Bit(); aFile.write(strBytes, strBytes.length());//写入文件 aFile.close();ui.tabWidget->setCurrentIndex(0);return true;
}//用QTextStream保存文本文件
bool sample7_1QFile::saveTextByStream(const QString &aFileName)
{QFile aFile(aFileName);if (!aFile.open(QIODevice::WriteOnly | QIODevice::Text))return false;QTextStream aStream(&aFile);//用文本流读取文件//aStream.setAutoDetectUnicode(true);//自动检测Unicode,才能正常显示文档内的汉字QString str = ui.textEditStream->toPlainText();//转换为字符串aStream << str; //写入文本流 //QTextDocument *doc; //文本对象//QTextBlock textLine; //文本中的一段//doc=ui->textEditStream->document(); //QPlainTextEdit 的内容保存在一个 QTextDocument 里//int cnt=doc->blockCount();//QTextDocument分块保存内容,文本文件就是硬回车符是一个block,//QString str;//for (int i=0; i<cnt; i++) //扫描所有 blobk//{// textLine=doc->findBlockByNumber(i);//用blobk编号获取block,就是获取一行// str=textLine.text(); //转换为文本,末尾无\n// aStream<<str<<"\n";//}aFile.close();//关闭文件return true;
}//打开文件
void sample7_1QFile::on_actOpen_IODevice_triggered()
{QString curPath = QDir::currentPath();//获取系统当前目录QString dlgTitle = "打开一个文件"; //对话框标题QString filter = "程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)"; //文件过滤器QString aFileName = QFileDialog::getOpenFileName(this, dlgTitle, curPath, filter);if (aFileName.isEmpty())return;openTextByIODevice(aFileName);
}//打开文件
void sample7_1QFile::on_actOpen_TextStream_triggered()
{QString curPath = QDir::currentPath();//获取系统当前目录//调用打开文件对话框打开一个文件QString aFileName = QFileDialog::getOpenFileName(this, "打开一个文件", curPath,"程序文件(*.h *cpp);;文本文件(*.txt);;所有文件(*.*)");if (aFileName.isEmpty()){return; //如果未选择文件,退出}openTextByStream(aFileName); //打开文件
}void sample7_1QFile::on_actSave_IODevice_triggered()
{QString curPath = QDir::currentPath();//获取系统当前目录QString dlgTitle = "另存为一个文件"; //对话框标题QString filter = "h文件(*.h);;c++文件(*.cpp);;文本文件(*.txt);;所有文件(*.*)"; //文件过滤器QString aFileName = QFileDialog::getSaveFileName(this, dlgTitle, curPath, filter);if (aFileName.isEmpty()){return;}saveTextByIODevice(aFileName);
}void sample7_1QFile::on_actSave_TextStream_triggered()
{QString curPath = QDir::currentPath();//获取系统当前目录QString dlgTitle = "另存为一个文件"; //对话框标题QString filter = "h文件(*.h);;c++文件(*.cpp);;文本文件(*.txt);;所有文件(*.*)"; //文件过滤器QString aFileName = QFileDialog::getSaveFileName(this, dlgTitle, curPath, filter);if (aFileName.isEmpty()){return;}saveTextByStream(aFileName);
}
main 函数:
#include "sample7_1QFile.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);sample7_1QFile w;w.show();return a.exec();
}
相关文章:
Qt 文本文件读写与保存
Qt 文本文件读写与保存 开发工具:VS2013 QT5.8 设计UI界面,如下图所示 sample7_1QFile.h 头文件: #pragma once#include <QtWidgets/QMainWindow> #include "ui_sample7_1QFile.h"class sample7_1QFile : public QMainWin…...
Linux基础环境搭建(CentOS7)- 安装Scala和Spark
#Linux基础环境搭建(CentOS7)- 安装Scala和Spark Linux基础环境搭建(CentOS7)- 安装Scala和Spark 大家注意以下的环境搭建版本号,如果版本不匹配有可能出现问题!(spark不要下2.4版本的 会报错…...
SpringBoot 下的Excel文件损坏与内容乱码问题
序言 随着打包部署的方式的改变,原本正常运行的代码可能带来一些新的问题,比如我们现在使用SpringBoot 的方式生成Jar包直接运行,就会对我们再在Resource下的Excel文件产生影响,导入与预期不符的情况发生cuiyaonan2000163.com 比…...
官宣下代GPU存在缺陷,50系显卡或将迎来涨价
如果说 AMD 在 Ryzen 3000 系列还是和 intel 在 CPU 方面棋差一着的话,Ryzen 5000 系列就是打了个漂亮的翻身仗了。 凭借先进的 7nm 工艺制程和全新架构,让后来 intel 急忙推出「14nm」的 11 代酷睿也难以望其项背。 直到 intel 12 代发布的时候…...
使用pytorch实现LSTM预测交通流
原始数据: 免费可下载原始参考数据 预测结果图: 根据测试数据test_data的真实值real_flow,与模型根据测试数据得到的输出结果pre_flow 完整源码: #!/usr/bin/env python # _*_ coding: utf-8 _*_import pandas as pd import nu…...
C/C++(八)C++11
目录 一、C11的简介 二、万能引用与完美转发 1、万能引用:模板中的 && 引用 2、完美转发:保持万能引用左右值属性的解决方案 三、可变参数模板 1、可变参数模板的基本使用 2、push 系列和 emplace 系列的区别 四、lambda表达式…...
使用three.js 实现 自定义绘制平面的效果
使用three.js 实现 自定义绘制平面的效果 预览 import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.jsconst box document.getElementById(box)const scene new THREE.Scene()const camera new THREE.PerspectiveCam…...
玩转Docker | 使用Docker部署捕鱼网页小游戏
玩转Docker | 使用Docker部署捕鱼网页小游戏 一、项目介绍项目简介项目预览二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署捕鱼网页小游戏下载镜像创建容器检查容器状态下载项目内容查看服务监听端口安全设置四、访问捕鱼网页小游戏五、总结一、项目介绍…...
第2章 Android App开发基础
第 2 章 Android App开发基础 bilibili学习地址 github代码地址 本章介绍基于Android系统的App开发常识,包括以下几个方面:App开发与其他软件开发有什么不一 样,App工程是怎样的组织结构又是怎样配置的,App开发的前后端分离设计…...
通过 SYSENTER/SYSEXIT指令来学习系统调用
SYSENTER指令—快速系统调用 指令格式没有什么重要的内容,只有opcode ,没有后面的其他字段 指令的作用: 执行快速调用到特权级别0的系统过程或例程。SYSENTER是SYSEXIT的配套指令。该指令经过优化,能够为从运行在特权级别3的用户代码到特权级别0的操作系统或执行过程…...
Nginx开发实战——网络通信(一)
文章目录 Nginx开发框架信号处理函数的进一步完善(避免僵尸子进程)(续)ngx_signal.cxxngx_process_cycle.cxx 网络通信实战客户端和服务端1. 解析一个浏览器访问网页的过程2.客户端服务器角色规律总结 网络模型OSI 7层网络模型TCP/IP 4层模型3.TCP/IP的解释和比喻 最…...
w外链如何跳转微信小程序
要创建外链跳转微信小程序,主要有以下几种方法: 使用第三方工具生成跳转链接: 注册并登录第三方外链平台:例如 “W外链” 等工具。前往该平台的官方网站,使用手机号、邮箱等方式进行注册并登录账号。选择创建小程序外…...
获取平台Redis各项性能指标
业务场景 在XXXX项目中把A网的过车数据传到B网中,其中做了一个业务处理,就是如果因为网络或者其他原因导致把数据传到B网失败,就会把数据暂时先存到redis里,并且执行定时任务重新发送失败的。 问题 不过现场的情况比较不稳定。出…...
STM32 HAL 点灯
首先从点灯开始 完整函数如下: #include "led.h" #include "sys.h"//包含了stm32f1xx.h(包含各种寄存器定义、中断向量定义、常量定义等)//初始化GPIO口 void led_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开…...
【http作业】
1.关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld #关闭防火墙 [rootlocalhost ~]# setenforce 0 2.下载nginx包 [rootlocalhost ~]# mount /dev/sr0 /mnt #挂载目录 [rootlocalhost ~]# yum install nginx -y #下载nginx包 3.增加多条端口 [rootlocalhost ~]# n…...
WPF+MVVM案例实战(十一)- 环形进度条实现
文章目录 1、运行效果2、功能实现1、文件创建与代码实现2、角度转换器实现3、命名空间引用3、源代码下载1、运行效果 2、功能实现 1、文件创建与代码实现 打开 Wpf_Examples 项目,在Views 文件夹下创建 CircularProgressBar.xaml 窗体文件。 CircularProgressBar.xaml 代码实…...
简述MCU微控制器
目录 一、MCU 的主要特点: 二、常见 MCU 系列: 三、应用场景: MCU 是微控制器(Microcontroller Unit)的缩写,指的是一种小型计算机,专门用于嵌入式系统。它通常集成了中央处理器(…...
微服务的雪崩问题
微服务的雪崩问题: 微服务调用链路中的某个服务故障,引起整个链路种的所有微服务都不可用。这就是微服务的雪崩问题。(级联失败),具体表现出来就是微服务之间相互调用,服务的提供者出现阻塞或者故障&#x…...
Java基础(4)——构建字符串(干货)
今天聊Java构建字符串以及其内存原理 我们先来看一个小例子。一个是String,一个是StringBuilder. 通过结果对比,StringBuilder要远远快于String. String/StringBuilder/StringBuffer这三个构建字符串有什么区别? 拼接速度上,StringBuilder…...
logback日志脱敏后异步写入文件
大家项目中肯定都会用到日志打印,目的是为了以后线上排查问题方便,但是有些企业对输出的日志包含的敏感(比如:用户身份证号,银行卡号,手机号等)信息要进行脱敏处理。 哎!我们最近就遇到了日志脱敏的改造。可…...
LeetCode 53. 最大子数组和 超详细题解(贪心+分治+动规)
LeetCode 53. 最大子数组和 超详细题解(贪心分治动规) 🏷️ 标签:动态规划、贪心算法、分治法、数组、经典面试题 📊 难度:简单 | 📝 题目编号:53 | 🗂️ 题型࿱…...
OpenClaw语音交互方案:nanobot镜像对接语音输入输出
OpenClaw语音交互方案:nanobot镜像对接语音输入输出 1. 为什么需要语音交互能力 作为一个长期使用OpenClaw的技术爱好者,我一直在思考如何让这个强大的自动化工具更加"人性化"。传统的命令行和文本交互方式虽然高效,但对于不擅长…...
Windows 11系统优化终极指南:一键清理预装软件与隐私保护
Windows 11系统优化终极指南:一键清理预装软件与隐私保护 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化…...
如何为你的单片机项目选择最佳通信协议?I²C、SPI、UART全解析
单片机通信协议深度指南:从理论到实战的精准选择策略 当你的单片机需要与外部世界对话时,选择正确的通信协议就像为不同场合挑选合适的语言——商务会议需要正式严谨,朋友聊天则讲究轻松随意。在嵌入式系统设计中,UART、IC和SPI这…...
Xinference-v1.17.1保姆级:CentOS7离线环境部署,无外网依赖完整安装流程
Xinference-v1.17.1保姆级:CentOS7离线环境部署,无外网依赖完整安装流程 本文详细记录了在CentOS7离线环境中部署Xinference-v1.17.1的完整流程,无需外网依赖,适合企业内网环境使用。 1. 环境准备与前置检查 在开始安装之前&…...
3步解锁音频自由:NCMDump工具全场景解密指南
3步解锁音频自由:NCMDump工具全场景解密指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 问题:被加密的音乐困境 音乐收藏者的痛点清单 现代音乐爱好者常面临一个共同难题:从音乐平台下载的N…...
sdkman 一键切换 JDK 版本管理工具
👉 这是一个或许对你有用的社群🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 《项目实战(视频)》:从书中学,往事中…...
2025年项目管理工具深度评测:Gitee如何引领技术团队协作新范式
随着数字化转型进入深水区,项目管理工具正从简单的任务管理平台进化为企业数字化转型的核心枢纽。在2025年最新发布的《全球项目管理工具评测报告》中,Gitee凭借其独特的"开发协作"一体化设计,成为中国技术团队的首选平台。本文将深…...
建立情感绑架链:让团队恐惧失去你——软件测试从业者的职场影响力解析
测试工程师的隐形权力困境 在软件研发体系中,测试工程师常陷入价值被低估的困境。当迭代压力激增时,测试周期首当其冲被压缩;当线上出现故障时,测试环节却成为追责焦点。这种结构性矛盾催生出一种特殊的职场生存策略——通过构建…...
《Origin画百图》之矩阵散点图进阶:从数据洞察到模型诊断
1. 矩阵散点图在数据科学中的进阶价值 第一次接触矩阵散点图时,我只把它当作一个简单的可视化工具。直到在一次房价预测项目中,我发现这个看似基础的图表竟然能帮我发现数据中的多重共线性问题,才真正意识到它的威力。矩阵散点图就像数据科学…...
