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