博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据
阅读量:4626 次
发布时间:2019-06-09

本文共 3481 字,大约阅读时间需要 11 分钟。

QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据

本文博客链接:,作者:jdh,转载请注明.

參考链接:

环境:

主机:WIN7

开发环境:Qt5.2.1

说明:

在QML中不能直接对数据库进行操作,所以将QSqlQueryModel封装成子类,作为属性给QML使用

效果图:

源码:

qml文件里负责数据托管显示的代码:

Component        {            id: msnDelegate            Item            {                id: wrapper                width: grid.cellWidth; height: grid.cellHeight                Column                {                    Image{ source: "pics/light_on.png";anchors.horizontalCenter: parent.horizontalCenter; width: grid.cellWidth * 0.7; height: grid.cellHeight * 0.7}                    Text { text: ctrl_id;anchors.horizontalCenter: parent.horizontalCenter; color: wrapper.GridView.isCurrentItem ?

"red" :"blue" } Text { text: name;anchors.horizontalCenter: parent.horizontalCenter; color: wrapper.GridView.isCurrentItem ? "red" :"blue" } } MouseArea { anchors.fill: parent onClicked: grid.currentIndex = index } } } GridView { id:grid //anchors.fill: parent width: parent.width height: parent.height - space1.height anchors {top: space1.bottom;} cellWidth: parent.width * 0.25 cellHeight: parent.width * 0.25 //model: listModel model: myFirstModel delegate: msnDelegate highlight: Rectangle { color: "lightsteelblue"; radius: 5 } currentIndex: 2 //focus: true }

C++代码:

sqlquerymodel.h

#ifndef SQLQUERYMODEL_H#define SQLQUERYMODEL_H#include 
class SqlQueryModel : public QSqlQueryModel{ Q_OBJECT void generateRoleNames();public: explicit SqlQueryModel(QObject *parent = 0); void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase()); void setQuery(const QSqlQuery &query); QVariant data(const QModelIndex &index, int role) const; virtual QHash
roleNames() const;signals:public slots:};#endif // SQLQUERYMODEL_H
sqlquerymodel.cpp

#include "sqlquerymodel.h"#include 
#include
#include
SqlQueryModel::SqlQueryModel(QObject *parent) : QSqlQueryModel(parent){}void SqlQueryModel::setQuery(const QString &query, const QSqlDatabase &db){ QSqlQueryModel::setQuery(query,db); generateRoleNames();}void SqlQueryModel::setQuery(const QSqlQuery & query){ QSqlQueryModel::setQuery(query); generateRoleNames();}void SqlQueryModel::generateRoleNames(){ QHash
roleNames; for( int i = 0; i < record().count(); i++) { roleNames[Qt::UserRole + i + 1] = record().fieldName(i).toUtf8(); } //setRoleNames(roleNames);}QHash
SqlQueryModel::roleNames() const{ QHash
roleNames; for( int i = 0; i < record().count(); i++) { roleNames[Qt::UserRole + i + 1] = record().fieldName(i).toUtf8(); } return roleNames;}QVariant SqlQueryModel::data(const QModelIndex &index, int role) const{ QVariant value = QSqlQueryModel::data(index, role); if(role < Qt::UserRole) { value = QSqlQueryModel::data(index, role); } else { int columnIdx = role - Qt::UserRole - 1; QModelIndex modelIndex = this->index(index.row(), columnIdx); value = QSqlQueryModel::data(modelIndex, Qt::DisplayRole); } return value;}
主函数中
数据关联的代码:
SqlQueryModel *model1 = new SqlQueryModel(0);    model1->setQuery("SELECT * FROM ctrl_para");    QtQuick2ApplicationViewer viewer;    viewer.rootContext()->setContextProperty("myFirstModel", model1);    viewer.setMainQmlFile(QStringLiteral("qml/SH_User/base.qml"));    viewer.showExpanded();

注意:

query操作仅仅运行一次,所以要想实时显示数据库中的数据,能够定时读取数据库以动态显示数据

转载于:https://www.cnblogs.com/blfshiye/p/5414469.html

你可能感兴趣的文章
如何从数据库生成 EF Code First model
查看>>
box2dweb基础
查看>>
2013年3月4号
查看>>
jQuery 模拟 ubuntu 3D desktop 的 Dodge Effect 效果
查看>>
QT Creator 快速入门教程 读书笔记(一)
查看>>
CNN之yolo目标检测算法复习总结
查看>>
day17,模块的导入
查看>>
JavaScript网站设计实践(三)设计有特色的主页,给主页链接添加JavaScript动画脚本...
查看>>
Windows系统架构
查看>>
单链表上查找算法的实现(0955) swust-oj
查看>>
AU版有锁机的福利,704越狱彻底解决+86问题,完美IM/FT,重启不掉APN设置
查看>>
PCA的数学原理
查看>>
Flask Web Development —— Web表单(上)
查看>>
Struts2标签
查看>>
PHP知识结构
查看>>
1282. Game Tree
查看>>
关于iOS招聘面试的一些问题
查看>>
extjs grid renderer用法
查看>>
PAT Basic 1072
查看>>
作业分析,Karger最小割:(python)Engineering: Algorithms1 - SELF PACED Algorithms: Design and Analysis...
查看>>