最近无意中研究了下QML2.0的一些功能,了解了下QML2.0和C++如何进行交换,顺便看了下sqlite在QML中的使用,的确很给力,但是效率肯定比较低,毋庸置疑。
但是还是稍微说下它的便利性吧。
下面还是看下js的代码:
//import QtQuick.LocalStorage 2.0 //import QtQuick 2.0 //storage.js // 首先创建一个helper方法连接数据库 function getDatabase() { return LocalStorage.openDatabaseSync("QTableViewTestFunction","1.0","StorageDatabase",100000); } // 程序打开时,初始化表 function initialize() { var db = getDatabase(); db.transaction( function(tx) { // 如果setting表不存在,则创建一个 // 如果表存在,则跳过此步 tx.executesql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE,value TEXT)'); }); } // 插入数据 function setSetting(setting,value) { var db = getDatabase(); var res = ""; db.transaction(function(tx) { var rs = tx.executesql('INSERT OR REPLACE INTO settings VALUES (?,?);',[setting,value]); //console.log(rs.rowsAffected) if (rs.rowsAffected > 0) { res = "OK"; } else { res = "Error"; } } ); return res; } // 获取数据 function getSetting(setting) { var db = getDatabase(); var res=""; db.transaction(function(tx) { var rs = tx.executesql('SELECT value FROM settings WHERE setting=?;',[setting]); if (rs.rows.length > 0) { res = rs.rows.item(0).value; } else { res = "Unknown"; } }) return res }
QML2.0文件UI部分:
import QtQuick 2.0 import QtQuick.LocalStorage 2.0 //引入storage.js,起个别名Storage,以供后面使用 import "../sqliteJs.js" as Storage Rectangle { width: 1000 height: 600 id: screen color: "red" Text { id: textDisplay anchors.centerIn: parent //text:"http:www.baidu.com" renderType: Text.NativeRendering font.pointSize: 20 } Component.onCompleted: { // 初始化数据库 Storage.initialize(); // 赋值 // for(var i=0;i<100;i++) // { // setSetting("mySetting"+i,"myValue"+i); // } //获取一个值,并把它写在textDisplay里 textDisplay.text = "The value of mySetting is:\n" + Storage.getSetting("mySetting2"); } }
然后在c++实例下QML文件,即可看到效果,只不过c++可能要稍微设置下:
viewsqlite = new QQuickView(); viewsqlite->engine()->setOfflineStoragePath("./data");