如果我不能将 SQLite 数据库放入我的资源中,我可以将它放在我的 QT 应用程序中的什么位置?
Where can I put my SQLite database in my QT application if I can't put it in my resources?
最近我试图将 SQLite 数据库放入我正在编写的 QT 5 应用程序中。我希望它可以普遍访问——无论安装在何处,所有系统都可以访问它。我把它作为资源然后发现显然你不能把数据库放在资源中作为传递给 setDatabaseName 的数据库路径的字符串没有被翻译成资源系统所以数据库找不到。
那么我可以把它放在哪里呢?我不想像 C:\repo.db 或 D:\repo.db 那样把它放在驱动器的根目录下,因为很多人都讨厌文件弄乱他们的根目录(比如我)。我打算把它放在源文件夹中并以“repo.db”或我尝试的“./resources/database/repo.db”访问它,但即使 QFile 也看不到。我可以把它放在哪里以及如何在那里访问它?我的设置文件将在我的资源中,但我不确定那时是否可以更新该文件。我需要一个从应用程序安装在任何系统(包括我自己的系统)上时就可用的位置,以便在编码和构建时都可以访问它。
我不是征求意见 - 我想要一个不在根目录中的地方,一个通用的地方,比如安装目录(但我如何用代码找到它?)或设置目录(但我如何把它放在某个地方,这样我以后可以找到它??)
您可以使用 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()
为此,Qt 提供了一个 QStandardPaths
函数列表,return 平台特定的标准路径,例如桌面路径、临时目录等。
对于您的特定情况,您可以将数据库放在与 QStandardPaths::AppDataLocation
键对应的目录中。
最近我试图将 SQLite 数据库放入我正在编写的 QT 5 应用程序中。我希望它可以普遍访问——无论安装在何处,所有系统都可以访问它。我把它作为资源然后发现显然你不能把数据库放在资源中作为传递给 setDatabaseName 的数据库路径的字符串没有被翻译成资源系统所以数据库找不到。
那么我可以把它放在哪里呢?我不想像 C:\repo.db 或 D:\repo.db 那样把它放在驱动器的根目录下,因为很多人都讨厌文件弄乱他们的根目录(比如我)。我打算把它放在源文件夹中并以“repo.db”或我尝试的“./resources/database/repo.db”访问它,但即使 QFile 也看不到。我可以把它放在哪里以及如何在那里访问它?我的设置文件将在我的资源中,但我不确定那时是否可以更新该文件。我需要一个从应用程序安装在任何系统(包括我自己的系统)上时就可用的位置,以便在编码和构建时都可以访问它。
我不是征求意见 - 我想要一个不在根目录中的地方,一个通用的地方,比如安装目录(但我如何用代码找到它?)或设置目录(但我如何把它放在某个地方,这样我以后可以找到它??)
您可以使用 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()
为此,Qt 提供了一个 QStandardPaths
函数列表,return 平台特定的标准路径,例如桌面路径、临时目录等。
对于您的特定情况,您可以将数据库放在与 QStandardPaths::AppDataLocation
键对应的目录中。