2012-11-09 77 views
2

我使用-plugin-sql-mysql -plugin-sql-sqlite標誌構建了qt。我有libqsqlmysql.a和libqsqlite.a。我在我的項目中使用qt。但我的構建系統不是qt,我使用waf。Qt數據庫驅動程序

,我有以下問題,當我嘗試運行我的應用程序它建立與MySQL數據庫連接:

QSqlDatabase: QMYSQL driver not loaded              
QSqlDatabase: available drivers:               
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins  
INFO - Failed to connect to root mysql admin 

我加入-lqsqlmysql當我構建應用程序到編譯器選項。

您能否介紹一下qt驅動程序是如何工作的以及如何以及何時嘗試加載驅動程序。什麼是qt驅動程序(dll,lib,....)?

回答

3

我認爲你的應用程序試圖從DLL動態加載數據庫插件。 This document將幫助您找到數據庫驅動程序DLL的適當位置。或者,您可以靜態鏈接您的應用程序與插件,here's how

2

Qt擁有幾種類型的數據庫,這些插件的插件都位於以下位置:

$(QTDIR)/plugins/sqldrivers 

首先檢查如果MySQL插件是目前。如果插件不存在,那麼這意味着你沒有正確編譯Qt,所以你應該使用啓用的MySql插件重新編譯Qt。否則,你的應用程序可能不會正確加載mysql插件。 Qt插件是在應用程序初始化期間動態加載的,即,當QSqlDatabase對象將被初始化時。如果插件位置設置不正確,則不會加載任何插件。通過調用

QStringList QCoreApplication::libraryPaths() 

如果應用程序沒有指向正確的位置,您可以設置插件路徑:

void QCoreApplication::addLibraryPath (const QString & path ) 

或者查看位置您的應用程序期望通過以下的Qt API找到插件通過在放置可執行文件的文件夾中創建qt.conf文件。在此文件中,您可以按以下方式配置插件位置:

[Paths] 
Plugins = %pluginlocation%