0

我的 Qt C++ 项目涉及动态创建和使用 SQLite 数据库。

我将与数据库有关的所有内容封装在一个名为 Database 的类中。这是我的方法,如果它不存在则创建一个数据库文件,或者如果它存在则打开它:

void Database::connectDB(QString databaseName)
{
    QString fPath = QCoreApplication::applicationDirPath();
    fileName = fPath + "/DBs/" + databaseName + ".db";
    db = QSqlDatabase::database(connectionName);
    db.setDatabaseName(fileName);
}

connectionName并且fileName是在其他地方创建的 QStrings 并且是有效的。简单地说,这段代码有效。但仅当从 Qt Creator 运行时。我已经验证了我提供的绝对路径setDatabaseName会覆盖工作目录,如 Qt Creator 项目设置中所示。我必须手动创建文件夹 DBs。也许这不是最好的解决方法,但我认为它不会影响这种情况。毕竟,我也必须在从 Qt Creator 运行之前创建它。

我使用以下视频中的步骤在 Windows 10 上进行部署:https ://www.youtube.com/watch?v=8qozxqSZQEg

我认为这个--quick论点是针对我没有使用的 Qt Quick 的。我试过有无。

部署后,应用程序看起来可以正常工作,但它需要的数据库从未创建,因此最终崩溃。令我惊讶的是它不会立即崩溃。我可能弄错了,但它几乎似乎是在内存中创建前几个数据库。一些只能通过读取先前输入数据库的数据才能获得的信息确实出现了。但如果我关闭并重新启动,则不会。

我已经阅读了这个问题和链接的问题,但它们与这个问题的确切性质并没有太大关系:Path to the project current dir in qt

我无法理解为什么这不起作用。为了确定,我也在每个父文件夹中创建了 DBs 文件夹。没有什么。根本没有创建文件。它在 IDE 中工作,而不是一次部署。Qt Creator 提供了哪些部署后应用程序无法使用的功能?

我正在使用的编译器是 msvc2015_64,如果这很重要的话。如果我遗漏了任何其他可能有帮助的细节,请提及。我会编辑它们。

4

0 回答 0