1

私は小さなQtQuick2.0プロジェクトに取り組んでおり、OfflineStorageAPIを使用してローカルのsqliteデータベースにアクセスしています。DBに接続する方法は次のとおりです。

LocalStorage.openDatabaseSync("myDatabase", "1.0", "description", 50000000)

結局のところ、myDatabaseファイルは事前定義された場所に保存する必要があります。~/.local/share/Nokia/QtQmlViewer/QML/OfflineStorage/Databases/

私の質問は、このデフォルトのパスを、dbファイルを保持しているプロジェクトフォルダのパスに変更するにはどうすればよいですか?私はそれを調べましたが、データベースのカスタムの場所を設定するためのC++関数しか取得できませんでした

void setOfflineStoragePath (const QString & dir)

この単一のアプリケーションのカスタムデータベースフォルダパスをJavascriptから設定するにはどうすればよいですか?これも可能ですか?

4

2 に答える 2

1

純粋なQMLアプリケーションからオフラインストレージパスを設定することは不可能です。これは、利用可能なものに相当するものがないためQDeclarativeEngind::setOfflineStoragePathです。

追加のC++機能をQMLで使用できるようにすることができます。その方法については、こちらを参照してください。ただし、アプリケーションにC ++パーツを導入すると、そもそもそこからストレージパスを簡単に設定できます。

于 2013-01-08T15:13:14.293 に答える
0

まあ、これはずっと前のことだと私は知っています...しかし、参考のために、私は私の解決策を投稿します。

私は同じ問題を抱えており、AppDataStorageとOfflineStorageの間で多くの混乱がありました。

Main.cppで

  QQmlEngine qqEngine; //Creates an engine to fetch the OfflineStoragePath
 const QString dataFolder = qqEngine.offlineStoragePath(); 
 //Sets the Database folder
 QDir dir(dataFolder+"/Databases");

if (!dir.exists()) {
    dir.mkpath(".");
}
//Encrypt the database name with MD5, default from Qt
QString new_name = QString(QCryptographicHash::hash(("DatabaseName"),QCryptographicHash::Md5).toHex());
//Pick the source DB to be copied to the new location with the MD5 name
QFile file(":/DatabaseName.sqlite");
file.copy(dataFolder+"/Databases/" + new_name + ".sqlite");
file.close();
//The Sqslite must have a ini file with the database version and metadata in the same folder, so we also copy this file
QFile fileIni(":/databaseName.ini");
fileIni.copy(dataFolder+"/Databases/" + new_name + ".ini");
fileIni.close();

これは私にとって魅力のように機能しました。これが他の誰かに役立つことを願っています。

サンプルのIniファイル:

[全般的]

Description=テストデータベース

Driver = QSQLITE

EstimatedSize = 1000000

Name = TestDB

バージョン=1.0

于 2019-09-18T17:13:39.873 に答える