QT: 读写ini配置文件(实现qml界面登录,修改)

2024-06-05 18:44

本文主要是介绍QT: 读写ini配置文件(实现qml界面登录,修改),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一.功能介绍

二.暴露属性

三.指定INI文件的路径和格式。

四.登录操作

1.检查INI文件中是否含有登录信息;

2.读取存储的ID; 

3.读取存储的密码;

4.成功返回1;失败返回2;

五.修改账号

1.检查INI文件中是否含有登录信息;

2.读取存储的ID; 读取存储的密码;

3.判断密码是否正确

4.成功返回1;失败返回2;

六.修改密码

1.检查INI文件中是否含有登录信息;

2.读取存储的ID; 读取存储的密码;

3.判断账号是否正确

4.成功返回1;失败返回2;

七.效果展示

八.代码展示

1.h

2.cpp

3.qml登录

4.qml修改账号

5.修改密码qml

6.主页面mian.qml


一.功能介绍

在Qt中使用QSettings类来读写INI文件,主要作用是保存和读取程序的配置参数。INI文件作为初始化文件,通常用于存储应用程序的设置、用户偏好配置或其他形式的数据。下面将从多个角度进行分析:

1.数据持久化:使用INI文件可以在不同的程序运行会话之间保留配置信息,使得用户可以自定义并保存他们的偏好设置。

2.代码解耦性:通过外部配置文件管理配置项,可以将程序逻辑与配置数据分离,提高代码的可维护性和灵活性。

3.平台兼容性:QSettings支持多种平台和格式,包括Windows注册表、Mac OS X的PLists以及跨平台的INI文件,使得程序更易于迁移和适配不同操作系统。

4.操作简易性:QSettings封装了对INI文件的操作,提供了简单的API来读取和写入键值对,简化了配置文件的管理过程。

5.实时反映性:当程序的配置发生变化时,可以直接写入INI文件,而不需要重启程序,即可使更改即时生效。

6.注释说明性:INI文件支持注释,可以为配置文件中的节(section)或键(key)添加描述,增加文件的可读性和可维护性。

7.结构清晰性:INI文件具有清晰的层级结构,通过节(section)、键(key)、值(value)的组织方式,可以方便地管理和查找配置项。

8.类型安全性:QSettings结合QVariant使用,能够存储多种类型的数据,并且在读取时自动进行类型转换,确保了数据类型的安全性和准确性。

二.暴露属性

1.暴露用户登录属性;

2.暴露修改账号属性;

3.暴露修改密码属性;

三.指定INI文件的路径和格式。

四.登录操作

1.检查INI文件中是否含有登录信息;

2.读取存储的ID; 

3.读取存储的密码;

4.成功返回1;失败返回2;

当按钮被点击时,会调用_QMLreadini.userLogin(_idinput.text,_pasinput.text)这个函数,该函数调用C++对象readiniuserLogin方法,传入用户输入的用户名(_idinput.text)和密码(_pasinput.text)。

userLogin方法执行后,会返回一个整数 flag,表示登录的结果。根据 flag 的值,会执行不同的操作:

  • 如果 flag 为 0,表示没有登录信息,可能会提示用户“空”。
  • 如果 flag 为 1,表示登录成功,可以在这里添加成功登录后的操作,例如显示其他界面或者更新状态。
  • 如果 flag 为 2,表示登录失败,会提示用户“失败”。

五.修改账号

1.检查INI文件中是否含有登录信息;

2.读取存储的ID; 读取存储的密码;

3.判断密码是否正确

4.成功返回1;失败返回2;

当按钮被点击时,会调用_QMLreadini.setuserid(_idModify.text,_pasModify.text)这个函数,该函数调用C++对象readinisetuserid方法,传入用户输入的用户ID(_idModify.text)和密码(_pasModify.text)。

setuserid方法执行后,会返回一个整数 flag,表示修改账号的结果:

  • 如果 flag 为 0,表示用户ID或密码为空。
  • 如果 flag 为 1,表示修改账号成功,会显示“修改成功”的文本,并启动一个定时器(timerid.start(),1秒钟后关闭账号修改页面),同时隐藏“修改失败”的文本。
  • 如果 flag 为 2,表示修改账号失败,会显示“修改失败”的文本。

六.修改密码

1.检查INI文件中是否含有登录信息;

2.读取存储的ID; 读取存储的密码;

3.判断账号是否正确

4.成功返回1;失败返回2;

当按钮被点击时,会调用_QMLreadini.setuserpas(_Modifyid.text,_Modifypas.text)这个函数,该函数调用C++对象readinisetuserpas方法,传入用户输入的用户ID(_Modifyid.text)和密码(_Modifypas.text)。

setuserpas方法执行后,会返回一个整数 flag,表示修改密码的结果:

  • 如果 flag 为 0,表示用户ID或密码为空。
  • 如果 flag 为 1,表示修改密码成功,会显示“修改成功”的文本,并启动一个定时器(timerpas.start(),1秒钟后关闭密码修改页面),同时隐藏“修改失败”的文本。
  • 如果 flag 为 2,表示修改密码失败,会显示“修改失败”的文本。

七.效果展示

八.代码展示

1.h

#ifndef READINI_H
#define READINI_H
#include <QDebug>
#include <QSettings>
#include <QObject>
class  QSettings;class readini : public QObject
{Q_OBJECT
public:readini();Q_INVOKABLE int userLogin(QString id , QString pas);Q_INVOKABLE int setuserid(QString id , QString pas);Q_INVOKABLE int setuserpas(QString id , QString pas);private:QString m_id;QString m_pas;QSettings *m_pSettings;
};#endif // READINI_H

2.cpp

#include "readini.h"readini::readini()
{m_pSettings = new QSettings("E:/lzy/setting.ini",QSettings::IniFormat);
}int readini::userLogin(QString id, QString pas)
{if(m_pSettings->contains("login/id")){m_id = m_pSettings->value("login/id").toString();m_pas = m_pSettings->value("login/pas").toString();if(m_id == id && m_pas == pas){qDebug()<<"sssssssssss";return 1;}else {qDebug()<<"fffffffffff";return 2;}}else {qDebug()<<"aaaaaaaaa";}qDebug()<<id<<pas;return 0;}int readini::setuserid(QString id, QString pas)
{if(m_pSettings->contains("login/id")){m_id = m_pSettings->value("login/id").toString();m_pas = m_pSettings->value("login/pas").toString();if(m_pas == pas && id != ""){m_pSettings->beginGroup("login");//小组名m_pSettings->setValue("id",id);m_id = id;m_pSettings->endGroup();return 1;}else{return 2;}}return 0;
}int readini::setuserpas(QString id, QString pas)
{if(m_pSettings->contains("login/pas")){m_id = m_pSettings->value("login/id").toString();m_pas = m_pSettings->value("login/pas").toString();if(m_id == id && pas != ""){m_pSettings->beginGroup("login");//小组名m_pSettings->setValue("pas",pas);m_pas = pas;m_pSettings->endGroup();return 1;}else{return 2;}}return 0;
}

3.qml登录

import QtQuick 2.7
import QtQuick.Controls 1.4
import QMLreadini 1.0
import QMLsqlconnect 1.0Rectangle {visible: truewidth: 400height: 800Column{spacing: 30Text {id: nametext: qsTr("登录")font.pixelSize: 30}TextField{id:_idinputwidth: 200height: 60}TextField{id:_pasinputwidth: 200height: 60}Button{width: 200height: 40Text {anchors.centerIn: parenttext: qsTr("登录")font.pixelSize: 30}onClicked: {var flag = _QMLreadini.userLogin(_idinput.text,_pasinput.text)if(flag === 0){console.log("空")}if(flag === 1){console.log("成功")//_SqlLite.visible = true}if(flag === 2){console.log("失败")}}}Row{spacing: 30Button{width: 85height: 30Text {anchors.centerIn: parenttext: qsTr("修改账号")font.pixelSize: 20}onClicked:{_ModifyID.visible = ! _ModifyID.visible}}Button{width: 85height: 30Text {anchors.centerIn: parenttext: qsTr("修改密码")font.pixelSize: 20}onClicked:{_ModifyPas.visible = !_ModifyPas.visible}}}}}

4.qml修改账号

import QtQuick 2.7
import QtQuick.Controls 1.4
import QMLreadini 1.0
import QMLsqlconnect 1.0Rectangle {visible: truewidth: 400height: 800Timer {id: timeridinterval: 3000 // 3000ms = 3 secondsrunning: falseonTriggered: {_ModifyID.visible = falsetimerid.stop()}}Column{spacing: 30Text {id: nametext: qsTr("修改id")font.pixelSize: 30}TextField{id:_idModifywidth: 200height: 60}TextField{id:_pasModifywidth: 200height: 60}Button{width: 100height: 40Text {anchors.centerIn: parenttext: qsTr("修改账号")font.pixelSize: 20}onClicked: {var flag = _QMLreadini.setuserid(_idModify.text,_pasModify.text)if(flag === 0){console.log("空")}if(flag === 1){console.log("成功")_idModification.visible = truetimerid.start()_idModificationfailure.visible = false}if(flag === 2){console.log("失败")_idModificationfailure.visible = true}}}Text {id:_idModificationfailurefont.pixelSize: 30text: qsTr("修改失败")visible: false}Text {id:_idModificationfont.pixelSize: 30text: qsTr("修改成功")visible: false}Button{width: 100height: 40onClicked: {MyTools.gettoolTestInstance().doSomething()console.log("aaaaaaaaaaaaaaaaaaaa")}}}}

 5.修改密码qml

import QtQuick 2.7
import QtQuick.Controls 1.4
import QMLreadini 1.0
import QMLsqlconnect 1.0Rectangle {visible: truewidth: 400height: 800Timer {id: timerpasinterval: 3000 // 3000ms = 3 secondsrunning: falseonTriggered: {_ModifyPas.visible = falsetimerpas.stop()}}Column{spacing: 30Text {id: nametext: qsTr("修改Pas")font.pixelSize: 30}TextField{id:_Modifyidwidth: 200height: 60}TextField{id:_Modifypaswidth: 200height: 60}Button{width: 100height: 40Text {anchors.centerIn: parenttext: qsTr("修改密码")font.pixelSize: 20}onClicked: {var flag = _QMLreadini.setuserpas(_Modifyid.text,_Modifypas.text)if(flag === 0){console.log("空")}if(flag === 1){console.log("成功")_pasModification.visible = truetimerpas.start()_pasModificationfailure.visible = false}if(flag === 2){console.log("失败")_pasModificationfailure.visible = true}}}Text {id:_pasModificationfailurefont.pixelSize: 30text: qsTr("修改失败")visible: false}Text {id:_pasModificationfont.pixelSize: 30text: qsTr("修改成功")visible: false}}
}

6.主页面mian.qml

Login{id:_loginanchors.centerIn: parent}ModifyID{id:_ModifyIDanchors.centerIn: parent}ModifyPas{id:_ModifyPasanchors.centerIn: parent}

这篇关于QT: 读写ini配置文件(实现qml界面登录,修改)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1033874

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J