博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delegate辅助绘制
阅读量:4599 次
发布时间:2019-06-09

本文共 1600 字,大约阅读时间需要 5 分钟。

void ShareeSignatureDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {        // 沿用父类的绘制效果    QStyledItemDelegate::paint(painter, option, index);    painter->save();        // 从mode的data接口里根据role获取姓名和签名内容(NameRole,SignatureRole为data接口里自定义的角色名)    QString sharerName = index.data(NameRole).toString();    QString signature = index.data(SignatureRole).toString();    QStyleOptionViewItemV4 optV4 = option;    initStyleOption(&optV4, index);    const QWidget *widget = optV4.widget;    QStyle *style = widget ? widget->style() : QApplication::style();    QRect rect = style->subElementRect(QStyle::SE_ItemViewItemText, &optV4, widget);        // 定义起始位置    rect = rect.adjusted(5, 0, 0, - optV4.rect.height() / 2);        // 设置文字的长度,以及文字过长时的省略模式    QFontMetrics fontMetrics = painter->fontMetrics();    QString elidedNameLine = fontMetrics.elidedText(sharerName, Qt::ElideMiddle, rect.width());    QString elidedSignatureLine = fontMetrics.elidedText(signature, Qt::ElideMiddle, rect.width());        // 执行文字绘制    style->drawItemText(painter, rect, Qt::AlignBottom, QApplication::palette(), true, elidedNameLine);        // 设置签名内容的位置,使得该内容在姓名的下方    rect.moveTop(rect.bottom());    painter->setPen(QColor("#949fa5"));    if(!signature.isEmpty())        style->drawItemText(painter, rect, Qt::AlignVCenter, QApplication::palette(), true, elidedSignatureLine);    else        style->drawItemText(painter, rect, Qt::AlignVCenter, QApplication::palette(), true, "无T签?名?信?息¢");    painter->restore();}

效果图如下:

转载于:https://www.cnblogs.com/zw-h/p/4033014.html

你可能感兴趣的文章
OpenMobile's Application Compatibility Layer (ACL)
查看>>
html中文件类型的accept属性有哪些
查看>>
JS及JQuery对Html内容编码,Html转义
查看>>
Coursera公开课笔记: 斯坦福大学机器学习第十课“应用机器学习的建议(Advice for applying machine learning)”...
查看>>
竞价广告系统-广告检索
查看>>
强哥PHP面向对象学习笔记
查看>>
[转]基于.NET平台常用的框架整理
查看>>
Symbian (Read Inbox)读取收件箱的内容
查看>>
良好的编程规范
查看>>
struts2 入门
查看>>
.net 编译原理
查看>>
mean 快速开发和现有技术的对比分析
查看>>
Metro Style app :浏览器扩展
查看>>
linux的kernel是怎样工作的(TI_DM36X_ARM系统)(1)
查看>>
[luogu4310] 绝世好题 (递推)
查看>>
[luogu3203 HNOI2010] 弹飞绵羊 (分块)
查看>>
-Dmaven.multiModuleProjectDirectory system propery is not set.
查看>>
Python2 unichr() 函数
查看>>
Python 字典 copy()方法
查看>>
Minimum Path Sum
查看>>