我已经成功编译了 MySQL 驱动程序,但我无法强制 Qt 加载它们。
一开始应该说的是,我在安装包中获得了 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
APPLICATION\
APPLICATION\Debug\
APPLICATION\Release\
APPLICATION\sqldrivers\
当然我也有 QtSql*.dll。
我已经正确配置了 .pro:
QT += core gui network 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 中的任何驱动程序。 我使用相同的编译器(MSVC2010)编译了 Qt 和 SQL 驱动程序,没有错误。我正在运行我的代码几个月。任务是添加 MySQL 支持。
最佳答案
问题解决了! 我修改了代码,现在它看起来像这样:
#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:\APPLICATION\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);
关于mysql - Qt MySQL 无法加载插件驱动(QLibrary、QPluginLoader 成功加载,QSqlDatabase::drivers() 返回空!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14362881/