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库。没想到腾讯竟然还做开源