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類型