Qt开发Windows——配置文件,以Notepad Demo为例
Qt开发Windows——配置文件,以Notepad Demo为例
案例里面介绍了如何进行配置文件的保存和读取,实现了“最近打开”功能
00.功能介绍
【Qt开发Windows——配置文件,以Notepad Demo为例 00.功能介绍】
01.UI实现
【Qt开发Windows——配置文件,以Notepad Demo为例 01.UI实现】
02.逻辑分析
【Qt开发Windows——配置文件,以Notepad Demo为例 02.逻辑分析】
03.保存信息(一)
【Qt开发Windows——配置文件,以Notepad Demo为例 03.保存信息(一)】
04.保存信息(二)
【Qt开发Windows——配置文件,以Notepad Demo为例 04.保存信息(二)】
05.保存信息(三)
【Qt开发Windows——配置文件,以Notepad Demo为例 05.保存信息(三)】
06.获取信息
【Qt开发Windows——配置文件,以Notepad Demo为例 06.获取信息】
07.修改保存信息逻辑
【Qt开发Windows——配置文件,以Notepad Demo为例 07.修改保存信息逻辑】
08.菜单生成
【Qt开发Windows——配置文件,以Notepad Demo为例 08.菜单生成】
09.菜单功能实现
【Qt开发Windows——配置文件,以Notepad Demo为例 09.菜单功能实现】
10.清除历史
【Qt开发Windows——配置文件,以Notepad Demo为例 10.清除历史】
11.修复及完成实现
【Qt开发Windows——配置文件,以Notepad Demo为例 11/修复及完成实现】
完整代码
#include "QSettings"
QSettings * mSettings;
//获取历史记录
QList<QString> getHistory();
//保存打开历史记录
void saveHistory(QString path);
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setCentralWidget(ui->textEdit);
if(mSettings==NULL){
mSettings = new QSettings("settings.ini",QSettings::IniFormat);
}
initMenu();
}
MainWindow::~MainWindow()
{
delete ui;
}
//初始化菜单
void MainWindow::initMenu()
{
//获取Menu
QMenu * recent = this->findChild<QMenu *>("recent");
//获取Action
QSet<QObject *> chLists =recent->children().toSet();
foreach(QObject * ch,chLists){
QAction *action = (QAction *)ch;
//清空子菜单Action
recent->removeAction(action);
}
QList<QString> lists = getHistory();
for(int i=lists.size()-1 ;i>=0;i--){
//生成子菜单Action
recent->addAction(lists[i],this,&MainWindow::on_open_rencent_file);
}
if(lists.size()>0){
recent->addAction("清除历史记录",this,&MainWindow::on_clear_history_triggered,QKeySequence("Ctrl+Alt+Shift+C"));
}
}
//获取历史记录
QList<QString> getHistory(){
//打开开始读
int size =mSettings->beginReadArray("history");
//创建返回对象
QList<QString> lists;
for(int i = 0;i<size;i++){
mSettings->setArrayIndex(i);
QString path = mSettings->value("path").toString();
lists.append(path);
qDebug()<<i<<":"<<path;
}
//关闭读
mSettings->endArray();
return lists;
}
//保存打开历史记录
void saveHistory(QString path){
//获取历史
QList<QString> lists = getHistory();
foreach(QString str,lists){
if(str==path){
lists.removeOne(str);
}
}
lists.append(path);
//打开开始写入
mSettings->beginWriteArray("history");
for(int i =0;i<lists.size();i++){
mSettings->setArrayIndex(i);
//保存字符串
mSettings->setValue("path",lists[i]);
}
//关闭开始写入
mSettings->endArray();
}
//打开文件
void MainWindow::on_open_rencent_file()
{
QAction * action = (QAction *)sender();
QString fileName = action->text();
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly|QFile::Text)){
QMessageBox::warning(this,"警告","无法打开此文件"+file.errorString());
return;
}
currentFile = fileName;
setWindowTitle(fileName);
QTextStream in(&file);
QString text = in.readAll();
ui->textEdit->setText(text);
file.close();
saveHistory(currentFile);
initMenu();
}
void MainWindow::on_clear_history_triggered()
{
qDebug()<<"on_clear_history_triggered clicked...";
mSettings->remove("history");
initMenu();
}
c++