2020年新的一天,祝大家元旦快!路漫漫其修远兮,吾将上下而求索。
去年的效果跟目前的效果对比
这个是去年做的效果,当时得到了脏脏鱼大佬跟TM大佬的帮助,说实话当时能做到这样的效果已经不错了,但是还是留下些遗憾。
没有达到最理想的效果,当时受制于QStandarItem只能设置一个QIcon跟一个Text,最终只能做出这样的效果。
这个是前段时间实现的效果,得到了输入大佬跟猫咪大佬的帮助,用代理实现了我最终想要的效果,可以看到增加了阴影范围绘制跟曲
线绘制,我认为这东西是我今年做的算不错的东西啦。
再来一个Gif图看看效果
实现
代理本质上利用了Qt的绘制功能,也就是说你想绘制啥都行,绘制图片,绘制曲线,绘制text。因为我的QListView的item,不同的
Item可能会需要用到不同的曲线、不同的阴影范围、不同的图片(当然我这里暂时用的同一张图片)和不同的text。基本上不同的东西就这些了,
当然可能还有数量的不同。所以应该为代理的item创建一个专属的存放数据的结构体。
mulistitemdata.h
1 |
|
muitemdelegate.h
这里就是我们的代理相关的头文件
1 |
|
muitemdelegate.cpp
绘制相关过程都在paint函数里面这里绘制你需要得到的效果。
sizeHint函数这里180是你item的高度,这个你一定要设置下,它会影响你item画布的高度。
1 |
|
最后当然是要知道怎么使用这玩意了
万事俱备,只欠东风!
1 | QStandardItemModel *model = new QStandardItemModel();//获取项目的根节点 |
补充
你的item数量或者需要绘制的东西可能是需要改变的,如果需要改变item数量,重新new再设置model,它自己会将之前的item delete掉
另外要取得不同的绘制就需要像我这里设置不同的状态开关,itemData.able/itemData.select之类的。好了再次祝大家工作顺利!