上次和大家分享了Qt Model/View只读表的方法,简单回顾下:

因为是为一个Table设置Model,为了快速入门,我们选择继承QAbstractTableModel。继承后需要重写三个函数,分别是Model的行数和列数、以及每个Cell需要显示的内容。

这次和大家分享Qt Model/View教程的几个其他例子。

一、 使用Roles属性扩展只读Table

怎么扩展?扩展些什么?

上次的示例中我们是在role == Qt::DisplayRole时进行的显示,那么扩展时是不是有其他Roles属性?

具体扩展的内容,是不是也根据这些Roles呢? 答案是肯定的。

无需更改其他任何内容即可设置字体,背景色,对齐方式和复选框等属性,其他属性可请参阅Qt名称空间文档以了解有关Qt :: ItemDataRole枚举功能的更多信息。

在上次的程序基础上添加BackgroundRole属性,如下:

case Qt::BackgroundRole:

if (row == 1 && col == 2) //change background only for cell(1,2)

return QBrush(Qt::red);

break;

效果如下:

这里面值得注意的是调用data()函数的频率,具体可打印效果进行查看,一次可以判断使用分离的模型如何影响应用程序的性能。还有就是当鼠标悬浮在Cell时,都会对data()进行调用。

二、 在Cell中显示时钟

回顾之前的操作,View都是自动将数据与属性显示出来的,并且在特定条件下进行“更新显示”,如将鼠标悬浮在Cell上时;那么我们如何主动让Model更新数据呢——Model可以接收数据变化的信号,从而进行响应。Ok,下面看具体的例子:

接下来扩展的是在单元格中每个一秒显示一次当前的时间。

我们要考虑的几个问题:

如何产生一个更新时间的计数器?

如何将信号发送给Model进行更新?

直接看代码:

①使用QTimer进行计数,溢出时响应如下:

void MyModel::slot_updateTime()

{

QModelIndex topLeft = createIndex(0,0);

emit dataChanged(topLeft, topLeft);

}

将具体的Cell信息发送出去即可。

② DisplayRole属性设置

int row = index.row();

int col = index.column();

if (role == Qt::DisplayRole)

{

if (row == 0 && col == 0)

{

return QTime::currentTime().toString();

}

}

效果如下:

小结:本次主要和大家分享一下data()函数中其他属性的应用以及如何通过信号更新Cell数据。下次和大家分享下在Model中如何设置行列标题以及如何设置Table的可编辑属性。

学不可以已,积少成多!

更多原创信息,欢迎关注公众号 Pou光明

ok计数器使用教程_Qt ModelView教程(二)——应用举例相关推荐

  1. Xamarin XAML语言教程模板视图TemplatedView(二)

    Xamarin XAML语言教程模板视图TemplatedView(二) (2)打开MainPage.xaml文件,编写代码,将构建的控件模板应用于中TemplatedView.代码如下: <? ...

  2. 小米4硬改教程_小米手环3美化/修改资源包教程(含加入二维码教程)

    小米手环3美化/修改资源包教程(含加入二维码教程) 注意:本教程侧重于讲刷资源包res,不过多的进行刷固件的讲解(并且不建议刷固件,容易砖,一般修改res已经可以达到你预期的效果了). 1.2更新 温 ...

  3. Linux Shell脚本入门教程系列之(二)第一个shell脚本

    本文是Linux Shell脚本系列教程的第(二)篇,更多shell教程请看:Linux Shell脚本系列教程 通过上一篇教程的学习,相信大家已经能够对shell建立起一个大体的印象了,接下来,我们 ...

  4. 零基础 Amazon Web Services (AWS) 入门教程图文版(二)

    上一篇讲到,主机正常运转了.但是此时如果直接访问公网IP是打不开网页的,因为主机上没有搭建Web服务器环境,防火墙也没有开放80端口,并且我们没有上传任何网页文件.所以这一篇主要介绍服务器环境的搭建. ...

  5. ArcGIS Maritime Server 开发教程(九)二三维水深服务

    ArcGIS Maritime Server 开发教程(九)二三维水深服务 本章导读:ArcGIS 软件体系是使用 ArcGIS Bathymetry 桌面扩展构建和管理水深数据库,并且利用 Imag ...

  6. 无敌python爬虫教程学习笔记(二)

    系列文章目录 无敌python爬虫教程学习笔记(一) 无敌python爬虫教程学习笔记(二) 无敌python爬虫教程学习笔记(三) 无敌python爬虫教程学习笔记(四) 手刃一个小爬虫 系列文章目 ...

  7. 安卓修改电池容量教程_图吧小白教程 篇三十二:手机拆换原装电池教程——替换寿命将届的原厂电池,提升手机续航...

    图吧小白教程 篇三十二:手机拆换原装电池教程--替换寿命将届的原厂电池,提升手机续航 2019-12-05 13:01:04 1点赞 20收藏 1评论 你是AMD Yes党?还是intel和NVIDI ...

  8. 【GDAL基础教程】多张二维tif数据转三维tif数据

    [GDAL基础教程]多张二维tif数据转三维tif数据 今天分享一下多张二维单波段tif数据合并为一张三维多波段tif数据的脚本,话不多说,详见代码. 原数据 # -*- encoding: utf- ...

  9. 少儿编程Scratch学习教程5--基本操作(二)动画例子

    本篇介绍下动画相关例子 1.表情的转换 首先创建一个精灵角色 之后在外观选项中,选择"将造型切换为...",这样就可以在特定情况下就可以更换造型了 添加一个事件,当按下" ...

最新文章

  1. 英伟达的STEAL AI让神经网络拥有更好的计算机视觉
  2. Android中使用SeekBar拖动条实现改变图片透明度
  3. 管理系统中计算机应用怎么自学,有自学的没,管理系统中计算机应用上机题。...
  4. 6、mysql中字段
  5. 一道非常棘手的 Java 面试题:i++ 是线程安全的吗
  6. 前端学习(777):Math对象
  7. 数据库存取BLOB类型音乐文件的过程及常见错误
  8. [GNU LD系列 3.3] 简单的链接脚本例程
  9. 技术胖Flutter第四季-19导航父子页面的跳转返回
  10. python 列表自动排序_Python学习小技巧之列表项排序的示例代码分享
  11. HCNP学习笔记:OSPF报头及各种报文格式
  12. 初识大数据 小孩子都懂的大数据
  13. st7789 旋转_st7789v spi通信
  14. 日处理数据量超10亿:友信金服基于Flink构建实时用户画像系统的实践
  15. java处理paypal支付
  16. 解决vue项目路由出现message: Navigating to current location (XXX) is not allowed的问题
  17. 截至20161210香港创业板股票代码和名称
  18. 不用ps也能在线设计电商详情页的方法
  19. 如何用python画七彩蟒蛇_Python实现七彩蟒蛇绘制实例代码
  20. 辐射度算法(radiosity)原理

热门文章

  1. JPA学习笔记---JPA实体Bean的建立---链接上一个博文:对实体Bean中属性进行操作:保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;可以存放二进制数据,可以存放
  2. java 单例加锁方法的讨论
  3. Linux使用evhttp实现一个简单的HttpServer
  4. 杭电2540遮挡判断
  5. java容器分数0-9_2018.4.27 java容器
  6. 动态修改路由_tutorial第二部分-路由参数
  7. Linux驱动编写(块设备驱动代码)
  8. 嵌入式操作系统内核原理和开发(地址空间)
  9. linux如何运行python_[TimLinux] Python如何运行程序
  10. python正则化_如何最简单、通俗地理解Python的正则化?