最近学习Qt,小白一枚,如有错误,请指出。
一,错误原因:
在Mac上使用Qt连接数据库Mysql报错,原因是Qt中没有和MySql的连接插件。具体错误如下图:
二,具体解决(以下解决方法建立在Qt安装了Source)
1,开发环境
- Mac OS 10.5.6
- Qt 5.14.2
- Mysql 8.0.12
2,具体步骤
第一部分
1,确定是否已经安装好了Mysql
安装完成后终端输入:
ls /usr/local
可以看见当前路径下的文件
图中存在mysql说明安装成功,或者查看Cellar文件中是否存在。
2,确定自己的Qt安装路径
/Users/mac/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers
3,打开终端,输入qmake -v
如果出现:
zsh: command not found: qmake
表明需要手动配置qmake的环境。
输入open ~./bash_profile或者vim ~./bash_profile(具体vim操作百度一下)
打开的文件中输入(注意:QTDIR后面的路径要换成自己的安装路径)
export QTDIR=/Users/mac/Qt5.14.2/5.14.2/clang_64
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH=$QTDIR/bin:$PATH
保存退出后,输入:
(将配置的环境立即生效)
source ~/.bash_profile
终端再次执行qmake -v,如出现下图表示配置成功。
cd Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers 到当前目录下,并且在sqldrivers 目录下依次执行:
qmake -- MYSQL_PREFIX=/usr/local/mysql
make sub-mysql
qmake
make install
执行完后可在
Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers
或者
Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers
路径下发现四个文件。
再次执行Qt中的项目时发现问题仍然未解决,还是出现相同的问题,说明连接的库出了问题。
第二部分
1,首先查看 /Users/mac/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/ 文件夹下是否存在libqsqlmysql.dylib,如果没有,继续在当前sqldrivers下的plugins/sqldrivers/ 文件夹中寻找。如果未找到则表示第一部分出错。
2,找到文件后,用终端打开libqsqlmysql.dylib的上一级目录下执行
otool -L libqsqlmysql.dylib,查看输出。
如出现上图,表示路径错误因为当前链接在
/Users/mac/Qt5.14.2/5.14.2/clang_64,需要链接在自己Mysql中(/usr/local/mysql-8.0.12-macos10.13-x86_64/lib)->我自己mysql的安装路径
首先查看 /usr/local/mysql-8.0.12-macos10.13-x86_64/lib 下是否有libmysqlclient.21.dylib文件,这个文件是安装时安装sql后建立的。
然后执行(注意要换成自己的路径)
sudo ln -s /usr/local/mysql/lib/libmysqlclient.21.dylib /Users/mac/Qt5.14.2/5.14.2/clang_64/lib/libmysqlclient.21.dylib
成功执行后再次执行 otool -L libqsqlmysql.dylib。这时候Qt就可以使用Mysql了。
Qt项目代码:(.pro文件中需要加上sql)
#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
qDebug() << QSqlDatabase::drivers();//输出支持的数据库
//添加MySql数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//连接数据库
db.setHostName("127.0.0.1"); //数据库服务器IP
db.setUserName("root"); //数据库用户名
db.setPassword("123456wfh"); //密码
db.setDatabaseName("test"); //使用哪个数据库
//打开数据库
if( !db.open() ) //数据库打开失败
{
QMessageBox::warning(this, "错误", db.lastError().text());
return;
}
else
{
qDebug() << "success link";
}
}
Widget::~Widget()
{
delete ui;
}
成功界面截图。