我已成功编译了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支持。
答案 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.dllX:\应用\ 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\