如何自定义QTreeWidgetItem的图标?

阿里云拼团返场活动: 点击加入

image.png

如图所示树形控件中的三个item,data1、data2和data3前面的环形图标分别表示它们的数据,环形图标会随着数据变化而变化。那么如何实现这种自定义的图标呢?其实很简单,只需要为树形控件定制一个代理(或者叫委托)即可。


1.首先创建一个代理类,继承于QStyledItemDelegate。重写paint函数和sizeHint函数。前者用于绘制item,自定义的内容都在paint函数里实现,后者用户指定item的大小。

image.png


2.在sizeHint函数中设置item的高度

image.png

首先通过调用父类的sizeHint函数得到一个大小,然后设置高度,最后返回这个QSize对象即可。


3.在paint函数中绘制图标

image.png

首先判断当前item是不是data这一级别的,如果是才需要自己绘制,否则直接用父类的方式处理。这里的type通过data函数获取,而type的设置是由QTreeWidgetItem的setData函数实现的。也就是说item和代理之间可以通过data/setData进行交互。


图标的绘制,先算出一个矩形区域用于绘制,然后计算数据所占的弧度长,代码如下:

image.png

option.rect表示整个item所占的矩形区域,知道这个就可以自己分配各个数据的绘制区域了。  drawArc用于绘制弧线,第二和第三个参数都是弧度值(用角度乘以16)。


4.使用代理。 代理的使用很简单,只需要调用QTreeWidget的setItemDelegate函数,把代理对象传进去即可。

image.png

QTreeWidgetItem通过setData设置数据,在第3步中已经提到了。

腾讯云活动继续: 看一看(竞争好激烈^_^)

演示站
上一篇:Qt Creator出现很多告警提示
下一篇:Qt如何去除字符串空格?

发表评论