热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

qlistview自定义控件_是否可以将自定义小部件添加到QListView中?

是否可以将自定义小部件添加到QListView中?请阅读以下内容:我想以上述格式显示每个日志消息解决方案为了达到预期的结果并避免性能问题,即使数据日志很长,也可以使用QListVi

是否可以将自定义小部件添加到QListView中?

请阅读以下内容:

我想以上述格式显示每个日志消息

解决方案

为了达到预期的结果并避免性能问题,即使数据日志很长,也可以使用

QListView

使用自定义委托:

例子

示例的基本部分是委托在列表视图中绘制项的方式:

void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option,

const QModelIndex &index) const

{

QStyleOptionViewItem opt(option);

initStyleOption(&opt, index);

const QPalette &palette(opt.palette);

const QRect &rect(opt.rect);

const QRect &contentRect(rect.adjusted(m_ptr->margins.left(),

m_ptr->margins.top(),

-m_ptr->margins.right(),

-m_ptr->margins.bottom()));

const bool lastIndex = (index.model()->rowCount() - 1) == index.row();

const bool hasIcon = !opt.icon.isNull();

const int bottomEdge = rect.bottom();

QFont f(opt.font);

f.setPointSize(m_ptr->timestampFontPointSize(opt.font));

painter->save();

painter->setClipping(true);

painter->setClipRect(rect);

painter->setFont(opt.font);

// Draw background

painter->fillRect(rect, opt.state & QStyle::State_Selected ?

palette.highlight().color() :

palette.light().color());

// Draw bottom line

painter->setPen(lastIndex ? palette.dark().color()

: palette.mid().color());

painter->drawLine(lastIndex ? rect.left() : m_ptr->margins.left(),

bottomEdge, rect.right(), bottomEdge);

// Draw message icon

if (hasIcon)

painter->drawPixmap(contentRect.left(), contentRect.top(),

opt.icon.pixmap(m_ptr->iconSize));

// Draw timestamp

QRect timeStampRect(m_ptr->timestampBox(opt, index));

timeStampRect.moveTo(m_ptr->margins.left() + m_ptr->iconSize.width()

+ m_ptr->spacingHorizontal, contentRect.top());

painter->setFont(f);

painter->setPen(palette.text().color());

painter->drawText(timeStampRect, Qt::TextSingleLine,

index.data(Qt::UserRole).toString());

// Draw message text

QRect messageRect(m_ptr->messageBox(opt));

messageRect.moveTo(timeStampRect.left(), timeStampRect.bottom()

+ m_ptr->spacingVertical);

painter->setFont(opt.font);

painter->setPen(palette.windowText().color());

painter->drawText(messageRect, Qt::TextSingleLine, opt.text);

painter->restore();

}

示例的完整代码可在

GitHub

.

结果

38598a0d7d435c1e576cc4e13cb0f6ed.png



推荐阅读
author-avatar
是的范德萨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有