关于QML2的sqlite那点事儿

最近无意中研究了下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");


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页