zoukankan      html  css  js  c++  java
  • [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类型

  • 相关阅读:
    CISC和RISC的区别
    常用ARM指令
    ARM汇编指令特点
    DMA(Direct Memory Access直接存储器访问)总结
    三态门(三态缓冲器)的工作原理
    DSP28335 eCAP 测频
    EINT DINT ERTM DRTM EALLOW EDIS ESTOP0的理解
    typedef interrupt void (*PINT)(void)的分析
    DSP28335 GPIO学习
    ECR102E(求减掉最长边加上最短边的最短路)
  • 原文地址:https://www.cnblogs.com/hermit/p/3621171.html
Copyright © 2011-2022 走看看