【问题标题】:How to set database name without specifying full path of a .sqlite file in Qt Creator如何在 Qt Creator 中不指定 .sqlite 文件的完整路径的情况下设置数据库名称
【发布时间】:2015-11-28 02:35:08
【问题描述】:

我对 Qt 比较陌生,但我刚刚完成了我的第一个项目程序。我有一个 .sqlite 文件,我通过这样做打开:

 db = QSqlDatabase::addDatabase("QSQLITE");
 db.setDatabaseName("/Users/.../.../Code/Database/AIOCS.sqlite"); //shortened for clarity

我需要把这个程序发给我的教授,但显然如果程序试图编译,数据库将无法打开,因为路径错误。我试图运行应用程序而不必在我的代码中指定文件路径。有没有办法将文件放在我只需要指定文件名的本地目录中。类似的东西:

db.setDatabaseName("AIOCS.sqlite");

例如,如果我在 mac 上运行我的程序,我将不得不使用:

db.setDatabaseName("/Users/.../.../Code/Database/AIOCS.sqlite"); //shortened for clarity

但是,在电脑上会是

db.setDatabaseName("C:\\User\\...\\Code\\Database\\AIOCS.sqlite"); //shortened for clarity

有没有办法只使用文件名,这样程序就可以在任何机器上运行而无需更改代码。

【问题讨论】:

  • 问题实际上是关于文件路径的,它与 SQLite 或 Qt Creator IDE 没有任何特别的关系。您能否将问题编辑得更具体?
  • 我试图更具体一些,如果我能提供更多信息,请告诉我
  • 使用相对文件路径,例如"db.setDatabaseName("../../Code/Database/AIOCS.sqlite");"

标签: c++ qt sqlite


【解决方案1】:

您可以使用 Qt OS 特定的宏来解决这个问题。例如,

#if defined(Q_OS_MAC)
    QString prefix = "/Users/.../.../Code/Database/";
#elif defined(Q_OS_WIN)
    QString prefix = "C:\\User\\...\\Code\\Database\\";
#endif

db.setDatabaseName(prefix + "AIOCS.sqlite");

那么你在 Win/Mac 机器上编译源代码时就不需要更改这些值了。

【讨论】:

  • 哇,这太酷了。我不知道你能做到这一点。我最终做的是创建一个自述文件,指示将数据库文件放在桌面上,然后我使用 db.setDatabaseName(QDir::homePath()+"/Desktop/AIOCS.sqlite")
猜你喜欢
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
相关资源
最近更新 更多