你好,我正在用Qt和sqlite写一个小项目。在安装了Qt框架的linux和windows中,所有这些都能很好地工作。但是当我试图在没有Qt的pc上运行它时,出现了一些问题。
这就是DB连接的方式: databaseservice.h
class DatabaseService : public QObject
{
Q_OBJECT
public:
explicit DatabaseService(QObject *parent = 0);
...
private:
static QSqlDatabase db;
...
};
databaseservice.cpp
#include "databaseservice.h"
#include <QSqlError>
#include <QSqlQuery>
#include <QDebug>
QSqlDatabase DatabaseService::db = QSqlDatabase::addDatabase("QSQLITE");
DatabaseService::DatabaseService(QObject *parent) : QObject(parent)
{
db.setDatabaseName("1cprint.db");
if(!db.open()) //true
{
QMessageBox::critical(0,
"Database init error",
"Database returns error - " + getLastError()); //Driver not loaded
exit(1);
}
...
}当我试图连接到DB时,我会收到“驱动程序未加载”错误。谷歌说,它可以是插件qsqlite.dll没有找到正确的路径。我试着将这个.dll放在子目录./sqldrivers/中,它在文档中是怎么写的;在./plugins/sqldrivers/中,直接放在项目目录中--所有这些都没有结果。从实验上,我发现qsqlite.dll是从Qt框架目录(D:\Qt\5.9.1\mingw53_32\plugins\sqldrivers)加载的,但从未从project加载。在带有Qt框架的pc上-如果我重命名或移动D:\Qt\5.9.1\mingw53_32\plugins\sqldrivers\qsqlite.dll -程序停止工作。
我尝试了许多QCoreApplication的变体::setLibraryPaths,qApp->addLibraryPath,但它们都没有给出结果。
想要个主意。
发布于 2017-09-07 08:55:05
终于找到了。将DatabaseService::db更改为非静态类成员--一切正常工作。
https://stackoverflow.com/questions/46068623
复制相似问题