• [Qt]用QItemDelegate的来修改QStandardItem字体颜色


    1.重写ItemDelegate的Item方法

    这里我使用的QListView来显示Log日志,将写好的代理在初始化中就可以直接赋值上。

    m_LogModel = new QStandardItemModel();
    this->textEditLog->setEditTriggers(QAbstractItemView::NoEditTriggers);
    this->textEditLog->setModel(m_LogModel);
    PItemDelegateEx *delegateEx = new PItemDelegateEx;
    this->textEditLog->setItemDelegate(delegateEx);

    后面在收到Log的时候,直接添加上去即可,这里我想传一个标记字段,苦苦没找到方法,后来查看API手册,看到setData方法,

    尝试了一下,成功解决了!

    QStandardItem *item = new QStandardItem(str);
    item->setSizeHint(QSize(25,25));
    QVariant typeVal(type);
    item->setData(typeVal,Qt::DecorationPropertyRole);
    m_LogModel->appendRow(item);

    在Opaint中去解析,绘图即可:

    Q_ASSERT(index.isValid());

    QString text = index.data(Qt::DisplayRole).toString();
    if(!text.isEmpty())
    {
    painter->save();
    QRect cellRect = option.rect;
    QBrush brush;

    int m_nMsgType = index.data(Qt::DecorationPropertyRole).toInt();
    qDebug() << "DelegateItem Type : " << m_nMsgType;
    if(m_nMsgType == LOGTYPE_NORMAL){
    painter->setPen(QColor(0,255,0));
    }
    else{
    painter->setPen(QColor(255,0,0));
    }

    painter->drawText(cellRect, Qt::AlignLeft, text);
    painter->restore();
    }

     

    最后就可以实现,传不同的type值进来即可显示不同的颜色!从而标记不同的log类型

  • 相关阅读:
    浏览器如何减少 reflow/repaint
    caller和callee的区别
    正则表达式中的2和1和3不仅分组还占位
    正则分组和捕获
    Javascript之BOM与DOM讲解
    Ubuntu14.04(nginx+php+mysql+vsftp)配置安装流程
    JS的类型转换
    typeof 和 instanceof
    ios对new Date() 的兼容问题
    module.exports 和 export default
  • 原文地址:https://www.cnblogs.com/hermit/p/3621171.html
Copyright © 2020-2023  润新知