如果我不能将我的 SQLite 数据库放在我的资源中,我可以将它放在我的 QT 应用程序中的啥位置?

Posted

技术标签:

【中文标题】如果我不能将我的 SQLite 数据库放在我的资源中,我可以将它放在我的 QT 应用程序中的啥位置?【英文标题】:Where can I put my SQLite database in my QT application if I can't put it in my resources?如果我不能将我的 SQLite 数据库放在我的资源中,我可以将它放在我的 QT 应用程序中的什么位置? 【发布时间】:2021-12-06 05:27:17 【问题描述】:

最近我试图将 SQLite 数据库放入我正在编写的 QT 5 应用程序中。我希望它是普遍可访问的——即在所有系统上,无论它安装在哪里。我把它作为资源然后发现显然你不能把数据库放在资源中,因为传递给 setDatabaseName 的数据库路径的字符串没有被翻译到资源系统,所以找不到数据库。

那么我可以把它放在哪里呢?我不想把它放在像 C:\repo.db 或 D:\repo.db 这样的驱动器的根目录下,因为很多人讨厌把根目录弄得乱七八糟的文件(比如我)。我打算将它放在源文件夹中并以“repo.db”或尝试“./resources/database/repo.db”的方式访问它,但即使是 QFile 也没有看到。我可以把它放在哪里以及如何在那里访问它?我的设置文件将在我的资源中,但我不确定是否可以更新该文件。我需要一个从应用程序安装到包括我自己在内的任何系统上的那一刻起就可用的地方,以便在编码和构建时都可以访问它。

我不是在征求意见 - 我想要一个不在根目录中的地方,一个通用的地方,比如安装目录(但我如何用代码找到它?)或设置目录(但我如何设置它某处以便我以后可以找到它??)

【问题讨论】:

你可以把它放在QStandardPaths::AppDataLocation键对应的目录下。另请参阅QStandardPaths 你摇滚!我不知道 QStandardPaths 但我现在正在使用它 - 我不知道如果我完全设置它们,如何在安装时设置它们,但我会要求你回答这个问题,以便我可以接受它这样的。我现在在我的代码中使用它 - 目前该目录基于 AppDataLocation 然后 ../../Resources/Database/repo.db 找到它但是当我进行完整构建和安装时,我将复制数据库文件然后到安装目录并使用它。 【参考方案1】:

您可以使用 QSettings 保存路径、设置并恢复它们。

QSettings m_Arhive("Company", "app_name");
//Set DB path
m_Arhive.setValue("DBPath", "c:/somewhere/database");
//Get DB path
m_Arhive.value("DBPath").toString()

【讨论】:

【参考方案2】:

为此,Qt 提供了一个QStandardPaths 函数列表,这些函数返回特定于平台的标准路径,例如桌面路径、临时目录等。 对于您的特定情况,您可以将数据库放在与 QStandardPaths::AppDataLocation 键对应的目录中。

【讨论】:

谢谢你,我觉得应该给予应得的奖励,尤其是当你帮助我的时候!

以上是关于如果我不能将我的 SQLite 数据库放在我的资源中,我可以将它放在我的 QT 应用程序中的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的标题放在 ImageView 的顶部

如何使用 sqlite 将我的图像保存到数据库中? [关闭]

我应该将我的网站配置值放在 LAMP 服务器设置中的啥位置?

如何将我的 Django SQLite 数据库内容放入 Heroku PostGreSQL 数据库?

将我的 Sqlite 数据上传到 SqlServer JSON

将我的应用程序的 sqlite db 替换为 android 30+ 中的备份数据库