【QT速成】QT速成练习之简易计数器(三)

简介: 【QT速成】QT速成练习之简易计数器(三)

4.存储功能

存储功能可以选择进行本地存储,云存储,数据库存储等等...由于我们这个是个小练习,于是选择最简单的本地存储。这里的构想就是在本地同目录下创建一个Counter.txt的文件对文章总数进行保存;在每次打开应用时对该目录下的文件内容进行读取,将读取到的值赋值到标签中,当关闭应用时,将标签中的总数读取出来然后保存到文件中。这样就可以实现本地数据存储了。


       既然选择了文件操作的方式,我们要声明一个全局变量保存文件的路径,这里使用的是相对路径,即该exe文件同目录下。

//定义文件路径;该文件只储存total数

QString path = "counter.txt";//相对路径

// QString path = "D:/QT/QT_Code/Counter/Counter/counter.txt";//绝对路径

  在构造函数中写入打开应用时对文件的操作流程:

  • 判断文件是否存在
  • 存在:
  • 加载该文件,判断文件是否有内容:
  • 有内容:读取文件内容并赋值
  • 无内容:读取总数并向文件写入内容
  • 不存在:
  • 创建并加载文件,向文件中写内容

//判断文件是否存在

   QFileInfo fileInfo(path);

   if (fileInfo.exists() && fileInfo.isFile()) {

       // 文件存在

       QFile file(path);//加载该文件

       if(file.open(QIODevice::ReadWrite))//可读可写方式打开

       {

           if(file.size() > 0)//文件有内容

           {

               QTextStream in(&file);//创建对象in并以file为其数据源

               TotalValueNow = in.readAll();//读文件内容

           }

           else//文件无内容

           {

               file.write(TotalValueNow.toUtf8());//写入数据

           }

       }

       file.close();

   }

   else

   {

       // 文件不存在

       QFile file(path);//创建并加载文件

       file.write(TotalValueNow.toUtf8());//写文件

       file.close();

   }

在析构函数中写入当窗口应用关闭时的操作:


QString value = ui->label_total->text();//读取总数数据

QFile file(path);//加载文件

file.open(QIODevice::WriteOnly);//只写方式打开文件

file.write(value.toUtf8());//写入数据

file.close();//关闭文件

       编译成功!!!


三.代码总览

所有代码都在mainwindow.cpp中:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QFileInfo"
 
#define Target_article 60
 
//定义文件路径;该文件只储存total数
QString path = "counter.txt";//相对路径
// QString path = "D:/QT/QT_Code/Counter/Counter/counter.txt";//绝对路径
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    QString TotalValueNow = "0";
 
    //判断文件是否存在
    QFileInfo fileInfo(path);
    if (fileInfo.exists() && fileInfo.isFile()) {
        // 文件存在
        QFile file(path);//加载该文件
        if(file.open(QIODevice::ReadWrite))//可读可写方式打开
        {
            if(file.size() > 0)//文件有内容
            {
                QTextStream in(&file);//创建对象in并以file为其数据源
                TotalValueNow = in.readAll();//读文件内容
            }
            else//文件无内容
            {
                file.write(TotalValueNow.toUtf8());//写入数据
            }
        }
        file.close();
    }
    else
    {
        // 文件不存在
        QFile file(path);//创建并加载文件
        file.write(TotalValueNow.toUtf8());//写文件
        file.close();
    }
    //设置Label初始值为0
    ui->label_total->setText(TotalValueNow);
    //初始值为Target_article
    ui->label_difference->setText(QString::number(Target_article - TotalValueNow.toInt()));
}
 
MainWindow::~MainWindow()
{
    QString value = ui->label_total->text();//读取总数数据
    QFile file(path);//加载文件
    file.open(QIODevice::WriteOnly);//只写方式打开文件
    file.write(value.toUtf8());//写入数据
    file.close();//关闭文件
 
    delete ui;
}
 
void MainWindow::on_pushButton_add_clicked()
{
    int clicked_ButtonValue = ui->label_total->text().toInt();//读取标签中的数据存到变量里
    clicked_ButtonValue ++;//数据+1
    ui->label_total->setText(QString::number(clicked_ButtonValue));//设置总数标签文本
    ui->label_difference->setText(QString::number(Target_article - clicked_ButtonValue));//设置差值标签文本
}
 
void MainWindow::on_pushButton_clicked()
{
    ui->label_total->setText(QString::number(0));
    ui->label_difference->setText(QString::number(Target_article - 0));
}
 

四.打包程序

将下方的编译选项调整为Release模式,编译运行:



               于是在对应项目文件夹路径->build->Desktop_Qt_6_7_2_MSVC2019_64bit-Release->release路径下就会出现一个exe可执行文件,将文件复制出来即可使用。


       放到一个空文件夹中,可见空文件夹除了这个可执行文件外没有任何文件了:



五.总结

       这是笔者第一次独立进行QT窗口开发,比较简陋,望大家海涵。



相关文章
|
2月前
【QT速成】QT速成练习之简易计数器(二)
【QT速成】QT速成练习之简易计数器(二)
|
2月前
【QT速成】QT速成练习之简易计数器(一)
【QT速成】QT速成练习之简易计数器(一)
|
23天前
|
存储 文件存储 数据库
【QT项目】QT项目综合练习之简易计数器(QT6+文件存储)
【QT项目】QT项目综合练习之简易计数器(QT6+文件存储)
Python Qt GUI设计:QSpinBox计数器类(基础篇—15)
Python Qt GUI设计:QSpinBox计数器类(基础篇—15)
Python Qt GUI设计:QSpinBox计数器类(基础篇—15)
|
5月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
187 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
4月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
94 0
|
3月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
|
3月前
|
4月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
172 2
Qt开发网络嗅探器02
Qt开发网络嗅探器02