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

1. QSaveFile和QFile的简单使用

1. 说明

QSaveFile和QFile两个类都是用来操作文件的,区别在于QSaveFile在对文件进行写入时有一种保护机制,再写入出错时,不会对源文件中的内容进行操作。该类在执行写操作时,会先将内容写入到一个临时文件中,如果没有错误发生,调用其成员函数commit()将临时文件中的内容移到目标文件中。

2. 简单使用案例

本案例中使用QSaveFile类进行文件写入操作,使用QFile类进行文件的读取操作,类QSaveFile在使用说明上显示也可以进行读操作,但在实际使用时发现会出问题。
包含两个界面:mainwindow.ui是主窗口,inputwindow.ui是信息输入弹窗,输入要写入文件的内容
mainwindow.ui:
在这里插入图片描述
inputwindow.ui:
在这里插入图片描述
mainwindow.h代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QSaveFile>
#include <QFile>
#include <QDir>
#include <QListWidgetItem>
#include <QDebug>#include "inputwindow.h"QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_btnWrite_clicked();void on_btnRead_clicked();void getInputText(QString mstr);private:Ui::MainWindow *ui;//引入第二界面弹窗对象InputWindow *inputWin;QSaveFile *mFile=nullptr;
};
#endif // MAINWINDOW_H

mainwindow.cpp代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//如果指定路径下不存在该文件,则会在该路径下新建此文件mFile = new QSaveFile("/home/chin/Desktop/Python/savefile2.py");mFile->open(QFile::WriteOnly|QFile::Truncate|QFile::Text);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_btnWrite_clicked()
{inputWin = new InputWindow(this);//调整位置和尺寸inputWin->setGeometry((this->width()- inputWin->width())/1.5,(this->height()-inputWin->height())/2,150,80);inputWin->show();//绑定信号,注意信号中如果带有参数,不能写参数的名字,给出参数类型即可,否则出错connect(inputWin,SIGNAL(sendInputStr(QString)),this,SLOT(getInputText(QString)));
}void MainWindow::on_btnRead_clicked()
{QFile file("/home/chin/Desktop/Python/savefile2.py");
//    qDebug()<<file.fileName().split('/')[file.fileName().split('/').length()-1].split('.')[0];QString str;if(file.open(QFile::ReadOnly)){str = file.readAll();}ui->fileContentList->addItem(str);
}void MainWindow::getInputText(QString mstr)
{if(mFile->isOpen()){mFile->write(mstr.toUtf8());qDebug()<<mstr;mFile->commit();}
}

不同界面之间的参数传递使用信号槽的方式实现,但是注意当信号中包含参数时,只需要写出参数的类型即可,不能写形参的名字,否则信号槽连接会出问题。
inputwindow.h代码:

#ifndef INPUTWINDOW_H
#define INPUTWINDOW_H#include <QWidget>
#include <QDebug>namespace Ui {
class InputWindow;
}class InputWindow : public QWidget
{Q_OBJECTpublic:explicit InputWindow(QWidget *parent = nullptr);~InputWindow();private slots:void on_btnYes_clicked();void on_btnCancel_clicked();signals://自定义信号void sendInputStr(QString str);private:Ui::InputWindow *ui;
};#endif // INPUTWINDOW_H

inputwindow.cpp代码:

#include "inputwindow.h"
#include "ui_inputwindow.h"InputWindow::InputWindow(QWidget *parent) :QWidget(parent),ui(new Ui::InputWindow)
{ui->setupUi(this);}InputWindow::~InputWindow()
{delete ui;
}void InputWindow::on_btnYes_clicked()
{QString str = ui->inputText->toPlainText();//发射信号emit sendInputStr(str);qDebug()<<str;delete this;
}void InputWindow::on_btnCancel_clicked()
{delete this;
}

持续更新中,请大家多多关注…

http://www.lryc.cn/news/8179.html

相关文章:

  • 工业4.0是如何优化垃圾处理行业的
  • vue 动画(transition)
  • Python 爬虫工程师面试经验分享,金三银四
  • MySQL实战篇-MySQL 降配导致的实例宕机
  • 时隔多年,这次我终于把动态代理的源码翻了个地儿朝天
  • 数据分析-深度学习 Tensorflow Day6
  • leaflet 设置多个marker,导出为一个geojson文件(066)
  • 企业与第三方供应商合作时,会存在哪些安全风险?
  • 技术源自洛克希德·马丁,光场XR眼镜FYR解析
  • 剑指 Offer 10- II. 青蛙跳台阶问题(LeetCode 70. 爬楼梯)(动态规划打表)
  • webpack(高级)--文件的压缩Terser(js/css/html) Tree Shaking
  • 做软文发布需要注意哪些细节?
  • 【Python】一篇文章读懂yield基本用法
  • Docker getting started
  • 【Uniapp使用遇到问题合集】
  • 宝塔面板破解最新教程
  • 基于zookeeper的Hadoop集群搭建详细步骤
  • 职称有哪些意义?如何提升职称?
  • mulesoft MCIA 破釜沉舟备考 2023.02.15.09
  • 【项目实战】@ConditionalOnProperty注解让我少写了一些if判断
  • SQL中的游标、异常处理、存储函数及总结
  • Splashtop:支持M1/M2芯片 Mac 电脑的远程控制软件
  • 实验十三、阻容耦合共射放大电路的频率响应
  • 【每天进步一点点】函数表达式和函数声明
  • JavaScript void
  • 笔记本电脑怎么连接无线网wifi?不同电脑系统的使用教程(2023最新)
  • 从lettcue插件看skywalking
  • explain 每个列的含义
  • 网络通信编程基础
  • Linux网络编程