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

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 文本文件读写与保存 开发工具&#xff1a;VS2013 QT5.8 设计UI界面&#xff0c;如下图所示 sample7_1QFile.h 头文件&#xff1a; #pragma once#include <QtWidgets/QMainWindow> #include "ui_sample7_1QFile.h"class sample7_1QFile : public QMainWin…...

Linux基础环境搭建(CentOS7)- 安装Scala和Spark

#Linux基础环境搭建&#xff08;CentOS7&#xff09;- 安装Scala和Spark Linux基础环境搭建&#xff08;CentOS7&#xff09;- 安装Scala和Spark 大家注意以下的环境搭建版本号&#xff0c;如果版本不匹配有可能出现问题&#xff01;&#xff08;spark不要下2.4版本的 会报错…...

SpringBoot 下的Excel文件损坏与内容乱码问题

序言 随着打包部署的方式的改变&#xff0c;原本正常运行的代码可能带来一些新的问题&#xff0c;比如我们现在使用SpringBoot 的方式生成Jar包直接运行&#xff0c;就会对我们再在Resource下的Excel文件产生影响&#xff0c;导入与预期不符的情况发生cuiyaonan2000163.com 比…...

官宣下代GPU存在缺陷,50系显卡或将迎来涨价

如果说 AMD 在 Ryzen 3000 系列还是和 intel 在 CPU 方面棋差一着的话&#xff0c;Ryzen 5000 系列就是打了个漂亮的翻身仗了。 凭借先进的 7nm 工艺制程和全新架构&#xff0c;让后来 intel 急忙推出「14nm」的 11 代酷睿也难以望其项背。 直到 intel 12 代发布的时候&#xf…...

使用pytorch实现LSTM预测交通流

原始数据&#xff1a; 免费可下载原始参考数据 预测结果图&#xff1a; 根据测试数据test_data的真实值real_flow&#xff0c;与模型根据测试数据得到的输出结果pre_flow 完整源码&#xff1a; #!/usr/bin/env python # _*_ coding: utf-8 _*_import pandas as pd import nu…...

C/C++(八)C++11

目录 一、C11的简介 二、万能引用与完美转发 1、万能引用&#xff1a;模板中的 && 引用 2、完美转发&#xff1a;保持万能引用左右值属性的解决方案 三、可变参数模板 1、可变参数模板的基本使用 2、push 系列和 emplace 系列的区别 四、lambda表达式&#xf…...

使用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开发常识&#xff0c;包括以下几个方面&#xff1a;App开发与其他软件开发有什么不一 样&#xff0c;App工程是怎样的组织结构又是怎样配置的&#xff0c;App开发的前后端分离设计…...

通过 SYSENTER/SYSEXIT指令来学习系统调用

SYSENTER指令—快速系统调用 指令格式没有什么重要的内容,只有opcode ,没有后面的其他字段 指令的作用: 执行快速调用到特权级别0的系统过程或例程。SYSENTER是SYSEXIT的配套指令。该指令经过优化&#xff0c;能够为从运行在特权级别3的用户代码到特权级别0的操作系统或执行过程…...

Nginx开发实战——网络通信(一)

文章目录 Nginx开发框架信号处理函数的进一步完善(避免僵尸子进程)(续&#xff09;ngx_signal.cxxngx_process_cycle.cxx 网络通信实战客户端和服务端1. 解析一个浏览器访问网页的过程2.客户端服务器角色规律总结 网络模型OSI 7层网络模型TCP/IP 4层模型3.TCP/IP的解释和比喻 最…...

w外链如何跳转微信小程序

要创建外链跳转微信小程序&#xff0c;主要有以下几种方法&#xff1a; 使用第三方工具生成跳转链接&#xff1a; 注册并登录第三方外链平台&#xff1a;例如 “W外链” 等工具。前往该平台的官方网站&#xff0c;使用手机号、邮箱等方式进行注册并登录账号。选择创建小程序外…...

获取平台Redis各项性能指标

业务场景 在XXXX项目中把A网的过车数据传到B网中&#xff0c;其中做了一个业务处理&#xff0c;就是如果因为网络或者其他原因导致把数据传到B网失败&#xff0c;就会把数据暂时先存到redis里&#xff0c;并且执行定时任务重新发送失败的。 问题 不过现场的情况比较不稳定。出…...

STM32 HAL 点灯

首先从点灯开始 完整函数如下&#xff1a; #include "led.h" #include "sys.h"//包含了stm32f1xx.h&#xff08;包含各种寄存器定义、中断向量定义、常量定义等&#xff09;//初始化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 的主要特点&#xff1a; 二、常见 MCU 系列&#xff1a; 三、应用场景&#xff1a; MCU 是微控制器&#xff08;Microcontroller Unit&#xff09;的缩写&#xff0c;指的是一种小型计算机&#xff0c;专门用于嵌入式系统。它通常集成了中央处理器&#xff08;…...

微服务的雪崩问题

微服务的雪崩问题&#xff1a; 微服务调用链路中的某个服务故障&#xff0c;引起整个链路种的所有微服务都不可用。这就是微服务的雪崩问题。&#xff08;级联失败&#xff09;&#xff0c;具体表现出来就是微服务之间相互调用&#xff0c;服务的提供者出现阻塞或者故障&#x…...

Java基础(4)——构建字符串(干货)

今天聊Java构建字符串以及其内存原理 我们先来看一个小例子。一个是String,一个是StringBuilder. 通过结果对比&#xff0c;StringBuilder要远远快于String. String/StringBuilder/StringBuffer这三个构建字符串有什么区别&#xff1f; 拼接速度上&#xff0c;StringBuilder…...

logback日志脱敏后异步写入文件

大家项目中肯定都会用到日志打印&#xff0c;目的是为了以后线上排查问题方便&#xff0c;但是有些企业对输出的日志包含的敏感(比如&#xff1a;用户身份证号&#xff0c;银行卡号&#xff0c;手机号等)信息要进行脱敏处理。 哎&#xff01;我们最近就遇到了日志脱敏的改造。可…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

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

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

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...