Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1649|回复: 0
打印 上一主题 下一主题

用QItemDelegate的paint重写

[复制链接]

1272

主题

2067

帖子

7958

积分

认证用户组

Rank: 5Rank: 5

积分
7958
跳转到指定楼层
楼主
发表于 2020-3-10 09:20:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[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:ecorationPropertyRole);
m_LogModel->appendRow(item);


在Opaint中去解析,绘图即可:
Q_ASSERT(index.isValid());

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

int m_nMsgType = index.data(Qt:ecorationPropertyRole).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类型



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-23 09:26 , Processed in 0.063653 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表