QML连接MySQL数据库

QT 5.X以上的版本集成了多种数据库的驱动

1
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

大部分情况只需要QT继承的库就可以完成数据库操作。

小坑

然而在使用Qt createor mingw时会出现无法载入驱动QSqlDatabase: QMYSQL driver not loaded的提示,出现这种情况的原因是Mingw的版本与驱动libmysql.dll不兼容。所以使用VS的情况下能够与Mysql成功连接。

默认安装的mingw都是32位,然而mingw内自带驱动却为64位,如果安装64位的MySQL得到的也是64位,因此需要下载32位的驱动放到mingw的bin目录下。这里提供我使用的版本

MySQL官网下载到的dll为400多kb与MySQL安装路径下的dll同样的大小,也无法成功连接,不知道是不是需要自己再编译一次?

连接数据库

引入头文件

1
2
3
4
#include <Qtsql/QSqlDatabase>
#include <Qtsql/QSqlQuery>
#include <QtSql/QSqlRecord>
#include <QtSql/QSql>

创建数据库对象,设置host、database、username、password参数,

使用QSqlQuery对象创建查询函数进入db对象进行语句操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setDatabaseName("chart");
db.setUserName("root");
db.setPassword("");
if(db.open()){
qDebug() << "db open successed" << endl;
QSqlQuery qsQuery = QSqlQuery(db);
qsQuery.exec("select * from chart limit 20");
while (qsQuery.next())
{
int id = qsQuery.value("id").toInt();

QString time = qsQuery.value("time").toString();

double val = qsQuery.value("val").toDouble();
qDebug()<<time<<endl
<<val<<endl;
}
qDebug() << "db close successed" << endl;
db.close();
}else{
qDebug() << "db open failed" << endl;
}

运行之后如果没有错误可以获得chart表内的数据

传递参数

这种思想就是MVC的方式,C++后台处理数据包装数据传递到前台,使用QML解析数据并展示出来。

main.cpp中使用了QQmlApplicationEngine继承自QQmlEngine,可以使用engine的rootContext()方法取得QT上下文使用setContextProperty()注册上下文属性(Context Property)

1
engine.rootContext()->setContextProperty("set", result);

在qml中可以直接调用变量名set就可以获得对象

1
2
3
Text{
text:set;
}


在这里以JSON展示结果是用了腾讯的rapidjson库。没想到腾讯竟然还做开源

文章作者: Image
文章链接: https://by.cx/2018/08/08/QT-QML-MySQL/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 编译程序