gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:31:24 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com