我的 Qt 应用程序有一个 SQLite 数据库。我认为将数据库作为资源添加是合乎逻辑的。
我无法让我的应用程序使用嵌入式资源进行编译。
connection.h
#ifndef CONNECTION_H
#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":/data/ShippingData.db3");
if (!db.open())
{
QMessageBox::critical(0, QObject::tr("Database Error"), db.lastError().text());
return false;
}
return true;
}
#endif // CONNECTION_H
assets.qrc
<RCC>
<qresource prefix="/data">
<file>ShippingData.db3</file>
</qresource>
</RCC>
我现在的sqlite数据库是这样的
app.pro
file.h
file.cpp
data/ShippingData.db3
构建问题(来自 Qt Creator)
No rule to make target `../TimePlotter/Shipping.db3', needed by `debug/qrc_assets.cpp'. Stop.
我尝试更改我的资源布局,因为它来自编译器不会进入数据库所在的数据/文件夹的消息。我得到了这个资源文件完全相同的构建问题
<RCC>
<qresource>
<file>data/ShippingData.db3</file>
</qresource>
</RCC>
TimePlotter.pro
#-------------------------------------------------
#
# Project created by QtCreator 2010-11-21T03:18:17
#
#-------------------------------------------------
QT += core gui
TARGET = TimePlotter
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
time.cpp \
clients.cpp \
printTime.cpp
HEADERS += mainwindow.h \
time.h \
clients.h \
printTime.h \
connection.h
FORMS += mainwindow.ui \
time.ui \
clients.ui \
printTime.ui
RESOURCES += \
assets.qrc
即使你解决了编译问题,在qrc文件中嵌入一个SQLite数据库也是行不通的。
最好的解决方案是恕我直言,在 qrc 文件中包含一个数据库转储,创建一个内存 SQLite 数据库并从资源中的 SQL 语句重建数据库。
我至少知道如何在 Mac OSX 上执行此操作,
QMAKE_BUNDLE_DATA
参数在其中起作用。对于 Windows,请查看这个答案。
在您的项目目录中创建一个名为“数据”的目录。
把你的数据库文件放在那里。
在您的
.pro
文件中,添加以下部分:
mac {
Resources.files = data
Resources.path = Contents/MacOS
QMAKE_BUNDLE_DATA += Resources
}
现在,当您重建应用程序时,它将位于 Contents/MacOS/data 文件夹中。因此,如果您的数据库名为 custom.db,您可以这样做:
db.setDatabaseName(QCoreApplication::applicationDirPath().append("/data/custom.db"));
您似乎删除或重命名了数据库文件 Shipping.db3 并添加了 ShippingData.db3。要解决此构建问题,您应该删除构建文件夹并重建项目。这应该可以解决您的构建问题。
您可以在这里阅读数据库部署说明:http://discussion.forum.nokia.com/forum/showthread.php?202894-Add-existing-Sqlite-database-to-Qt-project