QML连接MySQL数据库
QT 5.X以上的版本集成了多种数据库的驱动
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同样的大小,也无法成功连接,不知道是不是需要自己再编译一次?
连接数据库
引入头文件
#include <Qtsql/QSqlDatabase>
#include <Qtsql/QSqlQuery>
#include <QtSql/QSqlRecord>
#include <QtSql/QSql>
创建数据库对象,设置host、database、username、password参数,
使用QSqlQuery对象创建查询函数进入db对象进行语句操作
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)
engine.rootContext()->setContextProperty("set", result);
在qml中可以直接调用变量名set
就可以获得对象
Text{
text:set;
}
在这里以JSON展示结果是用了腾讯的rapidjson库。没想到腾讯竟然还做开源