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

标签 mysql qt plugins driver qtsql

我已经成功编译了 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/

相关文章:

c++ - 将 C++ 与 MySql 一起使用 : segmentation fault

c++ - Qt找不到平台插件cocoa

linux - 为什么Qt中的MainWindow在启动程序后关闭?

javascript - 在浏览器中查看 WordPress 插件请求的数据?

c# - 如何创建非常基本的插件系统

mysql - 创建临时表后缺少 'end'错误

php - 无法使用 mysql_query() 执行查询

c++ - 如何在关闭的 QDialog 和新打开的 QMainWindow 之间共享对象?

wordpress - 更改 Wordpress 站点中的 robots.txt 文件导致 SEO 困惑

php - 具有适当计数的双重查询