2017-09-06 88 views
0

美好的一天,我正在用Qt和sqlite編寫小型項目。所有在Linux和安裝了Qt框架的窗口中都很好用。但是當我試圖在沒有Qt的PC上運行它時,會出現一些問題。Qt 5.8,sqlite和windows中的部署

也就是說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); 
    } 

    ... 
} 

當我試圖連接到數據庫,我收到 「未加載驅動程序」 的錯誤。谷歌說,它可以插入qsqlite.dll找不到正確的路徑。我試圖將這個.dll放在子目錄./sqldrivers/,它是如何在文檔中說的;在./plugins/sqldrivers/,直接在項目目錄 - 所有沒有結果。在實驗中,我發現從Qt框架目錄(D:\ Qt \ 5.9.1 \ mingw53_32 \ plugins \ sqldrivers)加載的qsqlite.dll,但從來沒有從項目目錄。在與Qt框架的電腦上 - 如果我重命名或移動D:\ Qt \ 5.9.1 \ mingw53_32 \ plugins \ sqldrivers \ qsqlite.dll - 程序停止工作。

我嘗試了許多變種QCoreApplication :: setLibraryPaths,qApp-> addLibraryPath,但它們都沒有結果。

詢問想法。

+0

你是否試圖將dll與執行文件放在同一目錄級別? –

+0

是的,與可執行文件相同的目錄,。\ sqldrivers和。\ plugins \ sqldrivers - 沒有效果。 C:\ windows \ system32也試過。 – alchemist772

回答

0

終於找到了。將DatabaseService :: db更改爲非靜態類成員 - 並且一切正常。