【C++ qml】qml页面加载配置文件信息的两种方式
前言
工具类型应用,常需要读取配置信息进行展示。qml页面包含初始化加载,以及运行时状态变化加载
功能讲解
初始化加载
所有组件完成初始化之后,触发的加载动作
Component.onCompleted:{}
看其直白的翻译:
Component:组成部分
onCompleted:on为qml的事件触发前缀,Completed完成
意思即是qml页面组成部分(组件)完成(加载)之后,触发完成事件
运行时状态变化加载
首次进入此页面,或者是从其他页面进入到当前页面时的加载动作,tab页中常有此场景
onVisibleChanged: {}
看其直白的翻译,on为qml的事件触发前缀,VisibleChanged可见状态变化
源码
本篇是在上一篇的基础上,进行了小调整实现的https://blog.csdn.net/liangyuna8787/article/details/151767317?spm=1001.2014.3001.5502https://blog.csdn.net/liangyuna8787/article/details/151767317?spm=1001.2014.3001.5502
增加QSettings配置文件操作
在checkpwd类中增加配置文件操作功能
//checkpwd.h
#ifndef CHECKPWD_H
#define CHECKPWD_H#include <QObject>
#include <QVariant>class CheckPwd : public QObject
{Q_OBJECT
public:explicit CheckPwd(QObject *parent = nullptr);//声明给qml调用的函数Q_INVOKABLE bool logincheck(const QVariant usrname,const QVariant passwd);Q_INVOKABLE QVariant getusernamebyconf();//增加一个返回为字符串的读取配置函数signals:};#endif // CHECKPWD_H
//checkpwd.cpp
#define CONF_PATH "./shareconf.ini"
bool CheckPwd::logincheck(const QVariant usrname,const QVariant passwd){QString name=usrname.toString();QString pwd=passwd.toString();if(name== "admin" || name== "abc" || name== "test1")//只是为了测试{QSettings settings(CONF_PATH, QSettings::IniFormat);// 写入简单值settings.beginGroup("login");settings.setValue("username", name);settings.endGroup();return true;}elsereturn false;
}QVariant CheckPwd::getusernamebyconf(){QSettings settings(CONF_PATH, QSettings::IniFormat);// 写入简单值QString username = settings.value("login/username","no name").toString();qDebug() << username;return username;
}
Page1.qml增加动态加载配置信息
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12import CheckPwdObj 1.0
Rectangle {width: parent.widthheight: parent.heightcolor: "transparent"property alias welcomeName: welcomeText.textPasswordValidator {id: validator}// 应用刚启动,完成组件加载后只执行一次的动作
// Component.onCompleted: {
// getusename()
// }// 可见状态发生变化时加载onVisibleChanged: {getusename()}function getusename() {var username = validator.getusernamebyconf()console.log("用户名:", username)welcomeText.text = username}Label {id: welcomeTextanchors.centerIn: parentfont {pixelSize: 24bold: true}color: "#333333"text: "正在加载..."}
}