Qt MySQL无法加载插件驱动程序(QLibrary,QPluginLoader成功加载,QSqlDatabase :: drivers()返回空!)

时间:2013-01-16 16:18:58

标签: mysql qt plugins driver qtsql

我已成功编译了MySQL驱动程序,但我无法强制Qt加载它们。

在开始时应该说什么Iv在程序包中安装了ODBC和SQLite驱动程序(在安装Qt之后)并且它们也没有被检测到。

在* C:\ Qt \ 4.8.0 \ plugins \ sqldrivers *我有:

  

qsqlite4.dll

     

qsqlite4.lib

     

qsqlited4.dll

     

qsqlited4.lib

     

qsqlmysql4.dll

     

qsqlmysql4.lib

     

qsqlmysqld4.dll

     

qsqlmysqld4.lib

     

qsqlodbc4.dll

     

qsqlodbc4.lib

     

qsqlodbcd4.dll

     

qsqlodbcd4.lib

     

qsqlpsql4.dll

     

qsqlpsql4.lib

     

qsqlpsqld4.dll

     

qsqlpsqld4.lib

我输入的qsqlmysql *。*文件:

  

C:\ Qt的\ 4.8.0 \ BIN

     

应用\

     

应用\调试\

     

应用\发布\

     

应用\ sqldrivers \

当然Iv还有QtSql * .dll。

我正确配置了.pro:

  

QT + =核心gui网络sql

我正在运行此代码:

#include <QSqlRecord>
#include <QSqlError>

QLibrary mysqllib("qsqlmysqld4.dll");
mysqllib.load();
auto t1 = mysqllib.isLoaded();
qDebug()<<"my library loaded"<<mysqllib.isLoaded();

QPluginLoader plug("qsqlmysqld4.dll");
plug.load();
auto t2 = plug.isLoaded();
qDebug()<<"mysql plugin is loaded"<<plug.isLoaded();

ui->textEditContent->append( "--SQL DRIVERS SUPPORTED:--\n" );
FOREACH( auto driver, QSqlDatabase::drivers() )
    ui->textEditContent->append( "  " + driver + "\n" );

QLibrary和QPluginLoader返回true。并且QSqlDatabase :: drivers()为空。 我做错了什么? Qt看不到C:\ Qt \ 4.8.0 \ plugins \ sqldrivers中的所有驱动程序。 Iv使用相同的编译器(MSVC2010)编译Qt和SQL驱动程序,没有错误。我运行了几个月的代码。任务是添加MySQL支持。

2 个答案:

答案 0 :(得分:3)

问题解决了! 我修改了代码,现在它看起来像这样:

#include <QSqlRecord>
#include <QSqlError>    

QStringList liblist;
liblist.push_back("c:/Qt/4.8.0/plugins/");
liblist.push_back("c:/Qt/4.8.0/bin/");
QCoreApplication::setLibraryPaths(liblist);

QLibrary mysqllib("qsqlmysqld4.dll");
mysqllib.load();
auto t1 = mysqllib.isLoaded();
qDebug()<<"my library loaded"<<mysqllib.isLoaded();

QPluginLoader plug("qsqlmysqld4.dll");
plug.load();
auto t2 = plug.isLoaded();
qDebug()<<"mysql plugin is loaded"<<plug.isLoaded();

ui->textEditContent->append( "--SQL DRIVERS SUPPORTED:--\n" );
FOREACH( auto driver, QSqlDatabase::drivers() )
    ui->textEditContent->append( "  " + driver + "\n" );

似乎即使Qt有自己文件夹的路径,你需要在加载驱动程序之前指定它们。 您可以通过添加以下行来完成此操作:

QStringList liblist;
liblist.push_back("c:/Qt/4.8.0/plugins/");
liblist.push_back("c:/Qt/4.8.0/bin/");
QCoreApplication::setLibraryPaths(liblist);

如果要像我一样将这些驱动程序包含到应用程序文件夹中,请在应用程序的根目录中创建文件夹“sqldrivers”,并添加此根目录的路径。 所以我们在:

中有libmysql.dll和qsqlmysql.dll
  

X:\应用\ sqldrivers \

代码如下:

QStringList liblist;
liblist.push_back(QDir::currentPath()); // Qt always looks for those drivers in <LIB_FOLDER_SPECIFIED>/sqldrivers/
//liblist.push_back("e:/Qt/4.8.0/bin/");
//liblist.push_back("e:/Qt/4.8.0/plugins/");
QCoreApplication::setLibraryPaths(liblist);

答案 1 :(得分:0)

你还需要一个libmysql.dll

C:\Qt\4.8.0\bin

APPLICATION\

APPLICATION\Debug\

APPLICATION\Release\