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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM