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);
一些鼠标事件之类的事件处理