QML 本地存储(Setting,sqlite)

embedded/2024/12/22 19:59:32/

Qt hello - 专注于Qt的技术分享平台

QML 原生的储存方有两种:

1,Settings

跟QWidget 中的QSettings 一样,可以简单的存储一些配置。

2,Sqlite

sqlite数据库。可以存储一些复杂的数据。

一,Settings

我们以一个按钮的位置为例,进行讲解。

按钮移动时将x y 保存到Settings 中。

下次加载页面时 从Settings 读取位置。

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import Qt.labs.settings 1.0Window {width: 640height: 480visible: truetitle: qsTr("Hello World")Settings {id: settingsproperty int x: 0property int y: 0}Button{id:btntext: "hello"x:settings.xy:settings.y}Button{anchors.centerIn: parenttext: "move"onClicked: {btn.x+=10btn.y+=10settings.x = btn.xsettings.y = btn.y}}
}

main.cpp 中需要 定义 应用程序名称,公司名称,域名称。

效果:

QML 存储 - Qt hello

二,SQLite

1,将数据库操作 单独封装成一个js文件。

var db;function initDatabase() {db = LocalStorage.openDatabaseSync("Test", "1.0", "", 100000);try {db.transaction( function(tx) {tx.executeSql('CREATE TABLE IF NOT EXISTS data(name TEXT, desc TEXT, value TEXT)');})} catch (err) {console.log("Error creating table in database: " + err)};
}function readData(name) {var res="";if(!db) { return; }db.transaction( function(tx) {var result = tx.executeSql('select value from data where name=?', [name]);if (result.rows.length > 0) {res = result.rows.item(0).value;} else {res = "Unknown";}})return res
}function insertData(name, desc,value) {var res = "";if(!db) { return; }db.transaction( function(tx) {var result = tx.executeSql('INSERT OR REPLACE INTO data VALUES (?,?,?);', [name,desc, value]);if (result.rowsAffected > 0) {res = "OK";} else {res = "Error";}})return res
}

2,使用的时候 引入js 文件,之后直接调用接口就可以了。

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15import QtQuick.LocalStorage 2.0
import "db.js" as DBWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")Component.onCompleted: {//初始化数据库DB.initDatabase()}Column{anchors.centerIn: parentspacing: 10Row{spacing: 10Button{text: "添加"onClicked: {//添加数据DB.insertData(name.text,desc.text,value.text)}}TextField{id:name}TextField{id:desc}TextField{id:value}}Row{spacing: 10Button{text: "查询"onClicked: {//查询数据result.append(DB.readData(queryName.text))}}TextField{id:queryName}TextEdit{id:result}}}
}

3,main.cpp 中 指定下数据库的保存路径,比如当前路径。 不指定的话,会默认存到系统路径,不太好找。

4,效果

QML 存储 - Qt hello


http://www.ppmy.cn/embedded/37305.html

相关文章

three.js 效果细节提升

1. three.js 效果细节提升 加载模型时,给模型设置接受阴影,反射阴影 gltfLoader.load("./model/court-transformed.glb", (gltf) > {gltf.scene.traverse(child > {if (child.isMesh) {child.castShadow true; // 设置阴影可以投射阴…

SSM【Spring SpringMVC Mybatis】——Maven

目录 1、为什么使用Maven 1️⃣获取jar包 2️⃣添加jar包 3️⃣使用Maven便于解决jar包冲突及依赖问题 2、什么是Maven 3、Maven基本使用 3.1 Maven准备 3.2 Maven基本配置 3.3 Maven之Helloworld 4、Maven及Idea的相关应用 4.1 将Maven整合到IDEA中 4.2 在IDEA中新建…

Vue 过渡

点击按钮 控件背景颜色简单过渡变更。 <style> /* 过渡 */.transtion {transition: 3s background-color ease;}.blue {background-color: blue;}.green {background-color: green;}</style><body><div id"root"></div> </body>…

nginx模型设计和进程讲解

一. Nginx进程模型解析 1. master主进程 和 worker工作进程 [rootlocalhost sbin]# ps -ef|grep nginx root 15411 1 0 21:08 ? 00:00:00 nginx: master process ./nginx nobody 15412 15411 0 21:08 ? 00:00:00 nginx: worker process root…

IT项目管理【太原理工大学】前置知识点精简总结

根据上次考试以及其他方向考试的经验&#xff0c;这届考试可能偏向出题更灵活&#xff0c;能死记硬背或套公式的题减少&#xff0c;多做准备呀各位大三苦逼人&#xff0c;挂了补考还得回来补考凸^-^凸共勉 &#xff08;另外&#xff0c;别作弊&#xff0c;今天人工智能考试逮住…

element-plus el-time-picker 时间段选择(可多选)

实现一个如图的时间段选择器 处理好时间回显逻辑&#xff0c;组件内[‘’,‘’],后端数据[{startTime:‘’,endTime:‘’}]处理好加和减的显示逻辑 <template><div><div v-for"(item, index) in currentChoose" :key"index" class"fl…

算法打卡day40

今日任务&#xff1a; 1&#xff09;139.单词拆分 2&#xff09;多重背包理论基础&#xff08;卡码网56携带矿石资源&#xff09; 3&#xff09;背包问题总结 4&#xff09;复习day15 139单词拆分 题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; …

[力扣题解]40. 组合总和 II

题目&#xff1a;40. 组合总和 II 思路 回溯法 &#xff08;回溯还是很难的&#xff0c;递归不好理解&#xff0c;看着代码很少吧。。。&#xff09; 代码 class Solution { public:vector<vector<int>> result;vector<int> path;void function(vector&l…