Qt 5.8,sqlite并在windows中部署

时间:2017-09-06 06:52:15

标签: windows qt sqlite

美好的一天,我正在用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时,我收到错误“Driver not loaded”。谷歌说它可能是插件 qsqlite.dll 在正确的路径中找不到。我试着把这个.dll放在子目录 ./ sqldrivers / 上,它在文档中说的如何;在 ./ plugins / sqldrivers / 中,直接在项目目录中 - 所有没有结果的。实验上,我发现从Qt框架目录(D:\ Qt \ 5.9.1 \ mingw53_32 \ plugins \ sqldrivers)加载了 qsqlite.dll ,但从未从项目目录加载。在带有Qt框架的PC上 - 如果我重命名或移动D:\ Qt \ 5.9.1 \ mingw53_32 \ plugins \ sqldrivers \ qsqlite.dll - 程序停止工作。

我尝试了许多 QCoreApplication :: setLibraryPaths,qApp-&gt; addLibraryPath 的变体,但它们都没有给出任何结果。

要求创意。

1 个答案:

答案 0 :(得分:0)

终于找到了它。将DatabaseService :: db更改为非静态类成员 - 一切正常。