Qt SQLite数据库没有绝对路径

发布于 2024-12-28 15:31:06 字数 418 浏览 0 评论 0原文

有没有办法在不知道绝对路径的情况下引用database.sqlite 文件?

_db = QSqlDatabase::addDatabase("QSQLITE");
_db.setDatabaseName("/the/path/i/dont/know/database.sqlite");
  • 我已经尝试将database.sqlite添加到Resources文件夹中并通过qrc:调用它,但显然不可能写入资源文件。

  • 我还尝试使用QApplication::applicationDirPath();,但这会导致不同的路径,具体取决于用户的操作系统。例如,它将 MyApp.app/Contents/MacOS 附加到实际目录。

Is there a way to reference the database.sqlite file without knowing the absolute path?

_db = QSqlDatabase::addDatabase("QSQLITE");
_db.setDatabaseName("/the/path/i/dont/know/database.sqlite");
  • I already tried to add the database.sqlite to the Resources folder and call it via qrc:, but apparently it is not possible to write to a resource file.

  • I also tried using QApplication::applicationDirPath();, but this would result in different paths depending on the user's OS. E.g. it appends MyApp.app/Contents/MacOS to the actual directory.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

糖粟与秋泊 2025-01-04 15:31:06

当您使用 SQLite 作为后端创建 QSqlDatabase 时,您有两个选择:

  • 提供绝对路径作为数据库名称
  • 提供相对路径:在这种情况下,数据库将保存在二进制文件的目录中。

所以你必须知道你的情况下数据库的绝对路径。

编辑

如果您最初知道数据库应该位于哪里,您可以对其进行硬编码(这绝不是明智的),或者您可以创建一个配置并使用 QSettings 加载它。例如:

QSettings settings;
QString dbPath = settings.readValue("DBPath", QString(/*fallback path*/)).toString();
//do smth with dbPath

进一步查看此处

When you create a QSqlDatabase with SQLite as a backend you have two options:

  • Give an absolute path as a db name
  • Give a relative path: in this case the database will be saved in the directory of your binary.

So you must know absolute path of your db in your case.

edit

In the case you initially know where the database should be located you can either hardcode it (which is never wise) or you can create a configuration and load it using QSettings. For example:

QSettings settings;
QString dbPath = settings.readValue("DBPath", QString(/*fallback path*/)).toString();
//do smth with dbPath

Take a look further here

染墨丶若流云 2025-01-04 15:31:06

如果您想存储每个用户的数据库,请使用此方法:

QDesktopServices::storageLocation(QDesktopServices::DataLocation)

此方法返回可以存储持久应用程序数据的位置。

有关更多信息,请检查:http://doc.trolltech.com/4.5/qdesktopservices.html #存储位置

if you want to store the db per user you shout use this:

QDesktopServices::storageLocation(QDesktopServices::DataLocation)

this method returns the location where persistent application data can be stored.

for more information check this: http://doc.trolltech.com/4.5/qdesktopservices.html#storageLocation

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文