• Qt用委托绘制需要的图形的步骤


    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);

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

  • 相关阅读:
    flex,flashDevelop和gumbo编译器比较
    用侦听器的useCapture属性决定事件哪个阶段做处理
    关于显示对象的parent,stage属性的说明
    ASP.NET MVC 1.0 Result 几何?
    MVC Controller与ActionResult的返回值
    C# 可空类型和空接合运算符(??)
    C# 2.0新特性与C# 3.5新特性
    创建返回Excel的自定义ActionResult
    jQuery getJSON()函数及getScript()函数
    如何使用ASP.NET MVC的Filter
  • 原文地址:https://www.cnblogs.com/wzxNote/p/9512186.html
Copyright © 2020-2023  润新知