7:QT加载保存参数(读写日志)
方法一:
.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)
{//strQString 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_OBJECTpublic: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)
{//arg1ModelMartchParam.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_OBJECTpublic: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