c++ - 如果我不能将我的 SQLite 数据库放在我的 QT 应用程序中,我可以把它放在我的资源中吗?
问题描述
最近我试图将 SQLite 数据库放入我正在编写的 QT 5 应用程序中。我希望它是普遍可访问的——即在所有系统上,无论它安装在哪里。我把它作为资源然后发现显然你不能把数据库放在资源中,因为传递给 setDatabaseName 的数据库路径的字符串没有被翻译到资源系统,所以找不到数据库。
那么我可以把它放在哪里呢?我不想把它放在像 C:\repo.db 或 D:\repo.db 这样的驱动器的根目录下,因为很多人讨厌把根目录弄得乱七八糟的文件(比如我)。我打算将它放在源文件夹中并以“repo.db”或尝试“./resources/database/repo.db”的方式访问它,但即使是 QFile 也没有看到。我可以把它放在哪里以及如何在那里访问它?我的设置文件将在我的资源中,但我不确定是否可以更新该文件。我需要一个从应用程序安装在包括我自己在内的任何系统上的那一刻起就可用的地方,以便在编码和构建时都可以访问它。
我不是在征求意见 - 我想要一个不在根目录中的地方,一个通用的地方,比如安装目录(但我如何用代码找到它?)或设置目录(但我如何将它设置在某个地方,所以我以后能找到吗??)
解决方案
为此,Qt 提供了QStandardPaths
返回平台特定标准路径的函数列表,例如桌面路径、临时目录等。对于您的特定情况,您可以将数据库放在与QStandardPaths::AppDataLocation
键对应的目录中。
推荐阅读
- reactjs - Cloud9 IDE 是否可以支持 TSX?
- apache-camel - Apache Camel FTP - 获取文件列表
- c++ - UWP 执行 ImAssociateContextEx() 的方式是什么?
- webpack - 为什么lodash会在webpack中自动拆分成vendor?
- css - 将块 B 的内容扩展到块 A
- kubernetes - 为什么节点不是命名空间的一部分?
- javascript - Gatsby中没有markdown文件时如何解决GraphQL错误?
- javascript - 如何将一个泛型类型(嵌套对象)的结构复制到 TypeScript 中的另一个泛型?
- assembly - 如何避免在没有 POP 的情况下使用 PUSH?
- graphviz - 在节点的左侧和右侧添加标签