1.拷贝一份option:

QStyleOptionViewItemV4 opt = option;

2.获取到widget,也是通过QStyleOptionViewItem &option 然后类型转换QStyleOptionViewItemV3 ,调用成员widget实现:

const QWidget * CSMSDelegate::widget(const QStyleOptionViewItem &option) const
{
if (const QStyleOptionViewItemV3 *v3 = qstyleoption_cast<const QStyleOptionViewItemV3 *>(&option))
return v3->widget;

return 0;
}

const QWidget *widget = CSMSDelegate::widget(option);

3.subElementRec获取到子控件的坐标,自此我们需要画的控件的参考坐标就有了:

QStyle *style = widget ? widget->style() : QApplication::style();
QRect textItemRect = style->subElementRect(QStyle::SE_ItemViewItemText, &opt, widget);

4.然后就是根据文字内容的坐标各种计算坐标和尺寸;

f.setBold(true);
painter->setFont(f);

painter->setPen(QColor("#ffffff"));
painter->drawText(textx,titley,userstrW,lh, flag, senduserstr);
painter->restore();

把需要的字体,颜色设置到painter,然后调用drawText方法来画出内容;最后用restore()来恢复画笔;

委托里面几个方法的重新实现:

1.void paint(QPainter* painter, const QStyleOptionViewItem& option,const QModelIndex& index ) const;

option求出widget,然后painter用drawText画出内容;

2.QSize sizeHint(const QStyleOptionViewItem &option,const QModelIndex &index) const;

返回每个index的大小(我们需要的大小?)
3.bool editorEvent(QEvent *event, QAbstractItemModel *model,const QStyleOptionViewItem &option, const QModelIndex &index);

一些鼠标事件之类的事件处理

Qt用委托绘制需要的图形的步骤的更多相关文章

  1. Qt 2D绘图之一:基本图形绘制和渐变填充

    Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类.它们三者的关系如下图所示: QP ...

  2. matlab绘制二维图形

    常用的二维图形命令: plot:绘制二维图形 loglog:用全对数坐标绘图 semilogx:用半对数坐标(X)绘图 semilogy:用半对数坐标(Y)绘图 fill:绘制二维多边填充图形 pol ...

  3. Qt之自绘制饼图

    1.说明 最近在搞绘图方面的工作,说实话C++的第三方绘图库并不算多,总之我了解的有:qtcharts.ChartDirector.qwt.kdchart和QCustomPlot.这几个库各有利弊. ...

  4. 使用matplotlib绘制多个图形单独显示

    使用matplotlib绘制多个图形单独显示 一 代码 import numpy as np import matplotlib.pyplot as plt #创建自变量数组 x= np.linspa ...

  5. RRDtool绘制lvs连接数图形

    需求:用RRDtool绘制lvs的连接数图形 RRDtool是一个强大的绘图工具,作者是Tobias Oetiker. RRD全称Round Robin Database,轮转数据库,也是一个时间序列 ...

  6. [Swift通天遁地]八、媒体与动画-(5)使用开源类库绘制文字、图形、图像、图表、SVG(可缩放矢量图形)

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. [Qt5] 使用Qt设计器绘制主窗口

    实践代码: git clone https://github.com/dilexliu/learn_qt5.git Step1: Qt设计器绘制窗口 保存会得到一个文件: mainwindow.ui ...

  8. Ubuntu11.10 带图形安装步骤详解

    不多说,直接上干货! 成功!  关于Ubuntu的网络设置.静态IP设置,见 Ubuntukylin-14.04-desktop( 不带分区)安装步骤详解 Ubuntukylin-14.04-desk ...

  9. CentOS 7安装图形界面步骤和问题解决方法

    CentOS 7图形安装步骤: 首先需要进行必要的图形组件安装--命令为: yum groupinstall "X Window System " yum groupinstall ...

随机推荐

  1. PHP设计模式——桥接模式

    <?php /* * 桥接模式 * 使用发送器,将一个类对象传入另一个类作为属性,耦合M+N个类 * */ abstract class Info { protected $_send = NU ...

  2. Joker Xue

    大家好,我是LJ,来自于美丽的魏源故乡——隆回,从小被爸妈带到大,但是现在,我脱离了爸妈的管理,来到了远离家乡的长沙,大学生活当然美好,但是我们在做出每一个决定的同时,可能很少有他们的建议了,不过没有 ...

  3. struts2 实现文件下载方法汇总

    http://pengranxiang.iteye.com/blog/259401 一.通过struts2提供的下载机制下载文件: 项目名为 struts2hello ,所使用的开发环境是MyEcli ...

  4. deep learning学习记录一

    最近不小心又赶了一下时髦,在做deep learning.今天去听了复旦吴老师的课程,感觉吴老讲解的还是很清晰的. 上午刚看过cnn,下午讲解的就是这章,相对来说,我听着给了很多启发.

  5. SpringBoot非官方教程 | 第十八篇: 定时任务(Scheduling Tasks)

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot18-scheduling/ 本文出自方志朋的博客 ...

  6. HIbernate jar包

    密码nbbk https://pan.baidu.com/share/init?surl=nYNO1f20FWMQiZ7iN11DIA

  7. CentOS 7安装Oracle (CentOS Linux release 7.5.1804)

    从安装操作系统到完成oracle安装 1.安装centos7 下载CentOS7 iso安装包,配置虚拟机,由于只进行oracle安装练习,随便配置20G空间.选择安装文件. 开机,开始安装系统: 直 ...

  8. 每天一个Linux命令(6):rmdir命令

    rmdir命令用来删除空目录 注意:子目录被删除之前应该是空目录.就是说,该目录中的所有文件必须用rm命令全部,另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录 ...

  9. eclipse的中文插件链接及使用方法

    链接:http://www.eclipse.org/babel/downloads.php 帮助-->安装-->打开链接使用链接里面的语言包下载地址-->下载安装-->完成

  10. 使用第三方《UITableView+FDTemplateLayoutCell》自动计算UITableViewCell高度(Masonry约束)

    直接上代码: 1:先自定义cell .h文件中 #import <UIKit/UIKit.h> #import "LBDNewMsgListModel.h" #impo ...