7:QT加载保存参数(读写日志)

发布于:2025-05-27 ⋅ 阅读:(31) ⋅ 点赞:(0)

方法一:

.h

#ifndef IOPARAMETERS_H
#define IOPARAMETERS_H

#define  FILE_ADDRESS "./data/config.ini"
#include <QString>
#include <QVariant>
struct   ModelMartch
{
   double  minScore ;  //最小得分
   double  overLap ;   //重叠度
};


void  SaveSetting(QString FileAddress,QString Group, QString key , QVariant value);

//引用传参
void  LoadSetting(QString FileAddress,QString Group, QString key, QVariant &value);


//封装一个函数
void  WriteLog(QString ErrorType, QString  str);

#endif // IOPARAMETERS_H

.cpp

#include "ioparameters.h"
#include  <qsettings.h>

#include  <QDateTime>
#include  <QFile>
#include  <QTextStream>
#include  <qdebug.h>
void  SaveSetting(QString FileAddress,QString Group, QString key , QVariant value)
{
   QSettings  settings(FileAddress,QSettings::IniFormat);
   settings.beginGroup(Group);
   settings.setValue(key,value);
   settings.endGroup();
}

//组键值
void  LoadSetting(QString FileAddress,QString Group, QString key, QVariant &value)
{
   QSettings  settings(FileAddress,QSettings::IniFormat);
   settings.beginGroup(Group);
   value=settings.value(key);
   settings.endGroup();
}

void  WriteLog(QString ErrorType, QString  str)
{
    //str
    QString  strToWrite= QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
    strToWrite.append(QString("  %1  %2 \n").arg(ErrorType).arg(str));

    //QFile   文件
    QFile FileName1("./data");  //需要判断有误存在
    if(!FileName1.exists())
    {
        //创建文件夹
         qDebug()<<"Enter  Open Failed  001";
        return;
    }

 //   QFile FileName2("./data/B.txt"); //"./data/B.txt"  可以自动生成
//    if(!FileName2.open(QFile::WriteOnly))
//    {
//       qDebug()<<"Enter  Open Failed  002";
//       return;
//    }

    //开始 文本流
//    QTextStream  Stream01(&FileName2);  //文本流对象
//    Stream01 <<strToWrite;  //写入 字符串
//    Stream01.flush();
//    FileName2.close();   //文件  关闭


    QFile f("./data/B.txt");
    if(!f.open(QFile::ReadOnly))
    {
    qDebug() << "Open Failed  ";
    return;
    }
    QTextStream in(&f);
    QString s;
    s = in.readLine(); //把这一行读完
    qDebug() << "1  :+++++++"<<s;

    s = in.readLine(); //把这一行读完
    qDebug() <<"2  :+++++++"<< s;

    f.close();


}

主函数.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <ioparameters.h>



namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    ModelMartch  ModelMartchParam;

private slots:
    void on_doubleSpinBox_score_valueChanged(double arg1);

    void on_doubleSpinBox_overlap_valueChanged(double arg1);

    void on_pB_TestWriteLog_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

主函数.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //自动加载
    QVariant ValueMinScore, ValueOverlap;
    LoadSetting(FILE_ADDRESS,"ModelMarch","minScore",ValueMinScore);
    LoadSetting(FILE_ADDRESS,"ModelMarch","overLap",ValueOverlap);
    ModelMartchParam.minScore=ValueMinScore.toDouble();
    ModelMartchParam.overLap=ValueOverlap.toDouble();
    ui->doubleSpinBox_score->setValue(ModelMartchParam.minScore);
    ui->doubleSpinBox_overlap->setValue(ModelMartchParam.overLap);



}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_doubleSpinBox_score_valueChanged(double arg1)
{
    //arg1
    ModelMartchParam.minScore=arg1;  //结构体成员
    //保存参数
    SaveSetting(FILE_ADDRESS,"ModelMarch","minScore",QVariant(ModelMartchParam.minScore));

    //writelolg

}

void MainWindow::on_doubleSpinBox_overlap_valueChanged(double arg1)
{
    ModelMartchParam.overLap=arg1;
    SaveSetting(FILE_ADDRESS,"ModelMarch","overLap",QVariant(ModelMartchParam.overLap));
}

void MainWindow::on_pB_TestWriteLog_clicked()
{
    WriteLog("warning", QString::fromLocal8Bit("相机打开成功"));
}







方法二:

.h

#ifndef MY_QSETTINGS_H
#define MY_QSETTINGS_H
#include <QFile>
#include <QTextStream>
#include <QSettings>
#include <QStringList>
void SaveSetting(QString fileName, QString group, QString key, QVariant value);//组键值
void LoadSetting(QString fileName, QString group, QString key, QVariant &value);//组键,取得值
void readKeysFromConfigFile(const QString& fileName, const QString& groupName, QStringList &keysList);//获取一个组下所有key
void removeKeyFromGroup(const QString& fileName, const QString& group, const QString& key);//在指定的组下删除指定的键和值。
void WriteLog(QString fileName,QString logText);//写日志
void LoadLog(QString fileName,QString &logText);//读日志

#endif // MY_QSETTINGS_H

.cpp

#include "My_QSettings.h"
#include <QDebug>

void SaveSetting(QString fileName, QString group, QString key, QVariant value)
{
    QSettings s(fileName,QSettings::IniFormat);
    if(group != "")
    {
        s.beginGroup(group);

    }
    s.setValue(key,value);//
    if(group != "")
    {
        s.endGroup();
    }
}


//组键,取得值
void LoadSetting(QString fileName, QString group, QString key, QVariant &value)
{
    QSettings settings(fileName, QSettings::IniFormat);
    if (group != "") {
        settings.beginGroup(group);


    }
    value = settings.value(key);//
    if (group != "") {
        settings.endGroup();
    }
}


//获取一个组下所有key
void readKeysFromConfigFile(const QString &fileName, const QString &groupName, QStringList &keysList)
{
    QSettings settings(fileName, QSettings::IniFormat);
    settings.beginGroup(groupName);
    keysList = settings.childKeys();

}


//在指定的组下删除指定的键和值。
void removeKeyFromGroup(const QString &fileName, const QString &group, const QString &key)
{
    QSettings settings(fileName, QSettings::IniFormat);
    settings.beginGroup(group);
    settings.remove(key);
    settings.endGroup();
}


//写日志
void WriteLog(QString fileName, QString logText)
{
    QFile file(fileName);
    if(file.open(QIODevice::WriteOnly | QIODevice::Append))
    {
        QTextStream REN(&file);
        REN<< logText<< endl;
        //qDebug() << value;

    }else {
        qDebug() << QString::fromLocal8Bit("日志写入失败");
    }

    file.flush();
    file.close();
}


//读日志
void LoadLog(QString fileName,QString &logText)
{

    QFile file(fileName);
    QTextStream stream(&file);
    stream.setCodec("UTF-8");
    if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        while (!stream.atEnd()) {

            logText += stream.readLine();
            logText +="\n";
        }

        file.flush();
        file.close();
    }else {
        qDebug() << QString::fromLocal8Bit("日志读取失败");
        logText = QString::fromLocal8Bit("日志读取失败");
    }


}

主函数.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <src/QSettings/My_QSettings.h>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pB_Save_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

主函数.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QString filePath = ".\\date\\Student.txt";
    QVariant vName ;
    QVariant vAge ;
    LoadSetting(filePath,"StudentMessage","name",vName);
    LoadSetting(filePath,"StudentMessage","age",vAge);

    ui->lineEdit->setText(vName.toString());
    ui->spinBox->setValue(vAge.toInt());

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pB_Save_clicked()
{
    QString filePath = ".\\date\\Student.txt";
    SaveSetting(filePath,"StudentMessage","name",QVariant(ui->lineEdit->text()));
    SaveSetting(filePath,"StudentMessage","age",QVariant(ui->spinBox->value()));
}





附录:

1

2