QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据
QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
參考链接:
http://qt-project.org/wiki/How_to_use_a_QSqlQueryModel_in_QML
环境:
主机: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 <QSqlQueryModel> 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<int, QByteArray> roleNames() const; signals: public slots: }; #endif // SQLQUERYMODEL_H
sqlquerymodel.cpp
#include "sqlquerymodel.h"
#include <QSqlRecord>
#include <QSqlField>
#include <QDebug> 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<int, QByteArray> roleNames;
for( int i = 0; i < record().count(); i++) {
roleNames[Qt::UserRole + i + 1] = record().fieldName(i).toUtf8();
}
//setRoleNames(roleNames);
} QHash<int, QByteArray> SqlQueryModel::roleNames() const
{
QHash<int, QByteArray> 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操作仅仅运行一次,所以要想实时显示数据库中的数据,能够定时读取数据库以动态显示数据
QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据的更多相关文章
- C#在listview控件中显示数据库数据
一.了解listview控件的属性 view:设置为details columns:设置列 items:设置行 1.将listview的view设置为details 2.设置列属性 点击添加,添加一列 ...
- 在Linux环境下,将Solr部署到tomcat7中,导入Mysql数据库数据, 定时更新索引
什么是solr solr是基于Lucene的全文搜索服务器,对Lucene进行了扩展优化. 准备工作 首先,去下载以下软件包: JDK8:jdk-8u60-linux-x64.tar.gz TOMCA ...
- Echarts中tooltip解决显示指定数据
今天开发中遇到一个问题,echarts图表触摸x轴触发tooltip会将x轴上所有的数据展示出来,但是有些场合只需要展示某些数据就可以,并不需要全部展示,如下图: 这里警戒线因为需要开关,所以使用填充 ...
- webform中实现SQL Sever2008数据库数据分页查询
1 分页 1.1 数据库中存储过程 已知 当前页 pageIndex 页容量 pageSize 求 总页数 pageCou ...
- php中如何解决显示数据库中的内容乱码
第一步: 第二步:在代码开始处加一行
- 如何隐藏掉SQL Server中自带系统数据库,数据表,存储过程等显示文件,只显示用户的数据库,数据表等文件
企业管理器了,----> 编辑该数据库的注册属性--->“常规”属性页下面-->“显示系统数据库和系统对象”的选项去掉
- 如何在jsp中显示数据库的内容
用Eclipse tomcat新建一个JSP页面(一)介绍了如何创建一个web程序和第一个jsp页面,以及Eclipse需要的一些必要配置.今天,我们重点说一下如何从数据库中查询数据,并且在JSP页面 ...
- DirectSound---捕获音频、Qml/C++ 集成交互
DirectSound的音频捕获原理和播放原理差不多,内部在一个缓冲区上循环写入捕获到的数据,并且提供notify通知功能. 1. 音频捕获 因为捕获流程和播放流程类似,我们就不在这里赘述了,只给出简 ...
- QML 与 C++ 交互之工厂方法
QML 与 C++ 交互之工厂方法 先看例如以下的类声明,声明了一个产品类和工厂类. #include <QObject> class Productor : public QObject ...
随机推荐
- 洛谷P3387 【模板】缩点 题解
背景 今天\(loj\)挂了,于是就有了闲情雅致来刷\(luogu\) 题面 洛谷P3387 [模板]缩点传送门 题意 给定一个\(n\)个点\(m\)条边有向图,每个点有一个权值,求一条路径,使路径 ...
- Flume分布式日志收集系统
1.flume是分布式的日志收集系统,把收集来的数据传送到目的地去.2.flume里面有个核心概念,叫做agent.agent是一个java进程,运行在日志收集节点.通过agent接收日志,然后暂存起 ...
- linux学习笔记-3.文件相关命令
1.进入到用户根目录 cd ~ 或者 cdcd ~hadoop回到原来路径cd - 2.查看文件详情 stat a.txt 3.移动 mv a.txt /ect/改名mv b.txt a.txt移动并 ...
- windows10 下安装tensorflow 并且在jupyter notebook 上使用tensorflow
一.安装jupyter notebook并配置环境 首先建议大家安装anaconda,最新版本请到官网下载(点击下载连接),没错,直接点击下载python3.6版本的(当然选择做自己电脑相应的位数,我 ...
- ehcache 在web项目中使用
无论是servlet web项目还是spring web项目,使用ehcache添加3个jre包以及配置 ehcache.xml即可.
- luogu P1663 山
题目链接 luogu P1663 山 题解 只需要求出下凸包的最低点就好了 显然是由两个斜率相反的直线相交来的 盼下最低点为直线的情况 代码 #include<cstdio> #inclu ...
- BZOJ.2440.[中山市选2011]完全平方数(莫比乌斯函数 二分)
题目链接 总感觉博客园的\(Markdown\)很..\(gouzhi\),可以看这的. 题意即求第\(k\)个无平方因子数. 无平方因子数(Square-Free Number),即分解之后所有质因 ...
- R基础学习(二)-- 连接sqlserver
测试环境:win10+RStudio 三个步骤:(1)创建ODBC数据源:(2)install.packages('RODBC') :(3)编写连接测试脚本 (1)创建ODBC数据源 控制面板-> ...
- Codeforces Round #371 (Div. 1) C. Sonya and Problem Wihtout a Legend 贪心
C. Sonya and Problem Wihtout a Legend 题目连接: http://codeforces.com/contest/713/problem/C Description ...
- Markdown,你只需要掌握这几个
目录 题记 正文 1. 常用标记 这是一级标题 这是二级标题 这是三级标题 这是高阶标题(效果和一级标题一样 ) 这是次阶标题(效果和二级标题一样) 2. 次常用标记 3. 不常用标记 4. 专项使用 ...