首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt MySQL无法加载插件驱动程序(QLibrary,QPluginLoader成功加载,QSqlDatabase::driver ()返回空!)

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

Stack Overflow用户
提问于 2013-01-16 16:18:57
回答 2查看 3.6K关注 0票数 1

我已经成功地编译了MySQL驱动程序,但我不能强迫Qt加载它们。

在开始时应该说的是,在安装了Qt之后,使用了ODBC和SQLite驱动程序,它们也没有被检测到。

在*C:\Qt\4.8.0\plugins\got驱动程序* Iv中:

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也就位了。

Iv获得了正确配置的.pro:

QT +=核心gui网络sql

我正在运行这个代码:

代码语言:javascript
复制
#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\ the驱动程序中的任何驱动程序。Iv编译了具有相同编译器(MSVC2010)的Qt和SQL驱动程序,没有错误。我已经运行了几个月的代码。任务是添加MySQL支持。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-17 09:59:50

问题解决了!我修改了代码,现在看起来如下:

代码语言:javascript
复制
#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有自己的文件夹的路径,也需要在加载驱动程序之前指定它们。您可以通过添加以下行来做到这一点:

代码语言:javascript
复制
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:\APPLICATION\sqldrivers\

代码如下所示:

代码语言:javascript
复制
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);
票数 3
EN

Stack Overflow用户

发布于 2013-01-16 16:50:19

另外,您还需要在

代码语言:javascript
复制
C:\Qt\4.8.0\bin

APPLICATION\

APPLICATION\Debug\

APPLICATION\Release\
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14362881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档