Qt——程序中的配置文件

1.应用程序在运行后都有一个初始化的状态

  • 一般而言:程序的初始状态是最近一次运行退出前的状态

如何保存和恢复程序状态?

2.状态参数的存储方式

  • 文本文件格式(xml、json等)
  • 轻量级数据库(Access、SQLite)
  • 私有二进制文件格式

Qt中的解决方案:

通过二进制数据流将状态参数直接存储在文件中

优势:

(1)参数的存储和读取简单高效,易于编码实现

(2)最终文件为二进制格式,不易被恶意修改

AppConfig.h

复制代码
#ifndef APPCONFIG_H
#define APPCONFIG_H

#include <QObject>
#include <QFont>

class AppConfig : public QObject
{
    Q_OBJECT
    
    QFont m_editorFont; //编辑器字体
    bool m_isAutoWrap; //是否自动换行
    bool m_isToolBarVisible; //工具栏是否可见
    bool m_isStatusBarVisible; //状态栏是否可见
    bool m_isValid; //配置是否有效
    
    bool restore(); //读取配置
public:
    explicit AppConfig(QObject *parent = 0); //创建一个代表历史配置的对象,读取状态参数
    explicit AppConfig(QFont font, bool isWrap, bool tbVisible, bool sbVisible, QObject *parent = 0); //创建一个代表当前配置的对象,存取当前状态
    bool store(); //保存配置到文件中
    QFont editorFont();
    bool isAutoWrap();
    bool isToolBarVisible();
    bool isStatusBarVisible();
    bool isValid();

signals:
};

#endif // APPCONFIG_H

AppConfig.cpp

复制代码
#include "AppConfig.h"
#include <QFile>
#include <QDataStream>
#include <QApplication>

AppConfig::AppConfig(QObject *parent) : QObject{parent}
{
    m_isValid = restore();
}
AppConfig::AppConfig(QFont font, bool isWrap, bool tbVisible, bool sbVisible, QObject *parent)
{
    m_editorFont = font;
    m_isAutoWrap = isWrap;
    m_isToolBarVisible = tbVisible;
    m_isStatusBarVisible = sbVisible;
    m_isValid = true;
}
bool AppConfig::restore()
{
    bool ret = true;
    QFile file(QApplication::applicationDirPath() + "/app.config");
    
    if( file.open(QIODevice::ReadOnly) )
    {
        QDataStream in(&file);
        in.setVersion(QDataStream::Qt_5_15);
        
        in >> m_editorFont;
        in >> m_isAutoWrap;
        in >> m_isToolBarVisible;
        in >> m_isStatusBarVisible;
        
        file.close();
    }
    else
    {
        ret = false;
    }
    return ret;
}
bool AppConfig::store()
{
    bool ret = true;
    QFile file(QApplication::applicationDirPath() + "/app.config");
    
    if( file.open(QIODevice::WriteOnly) )
    {
        QDataStream out(&file);
        out.setVersion(QDataStream::Qt_5_15);
        
        out << m_editorFont;
        out << m_isAutoWrap;
        out << m_isToolBarVisible;
        out << m_isStatusBarVisible;
        
        file.close();
    }
    else
    {
        ret = false;
    }
    return ret;
}
QFont AppConfig::editorFont()
{
    return m_editorFont;
}
bool AppConfig::isAutoWrap()
{
    return m_isAutoWrap;
}
bool AppConfig::isToolBarVisible()
{
    return m_isToolBarVisible;
}
bool AppConfig::isStatusBarVisible()
{
    return m_isStatusBarVisible;
}
bool AppConfig::isValid()
{
    return m_isValid;
}
相关推荐
赶在日落之前1 小时前
使用conda-pack打包完整 Python 环境 + 依赖包,传到无网机器解压即用
开发语言·人工智能·python
雨落在了我的手上1 小时前
Java数据结构(一):初识集合框架
java·开发语言
程序大视界1 小时前
【C++ 从基础到项目实战】C++(三):函数进阶——重载、回调、递归与默认参数
开发语言·c++·cpp
爱喝水的鱼丶1 小时前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇)第二篇:SAP 报表数据筛选优化:选择屏幕自定义与查询效率提升
开发语言·数据库·学习·性能优化·sap·abap
HappyAcmen1 小时前
8.角色 Prompt 模板
开发语言·python·prompt
oort1231 小时前
VLStream 全开源决策式 AI 视频平台 技术视角完整说明
大数据·开发语言·人工智能·经验分享·python·开源·音视频
Cloud_Shy6181 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第二章 Item 10 - 12)
c语言·开发语言·网络·人工智能·windows·python·编辑器
Xeon_CC1 小时前
vs2026远程开发debian12容器的C++程序笔记
开发语言·c++·笔记
水无痕simon1 小时前
9 C语言的基础练习
c语言·开发语言·算法