利用delegate实现Qt*View部分内容高亮

利用delegate实现部分内容高亮

MVC模式是Qt中相当重要的一环,比如在QTableView中,我们想实现其中部分内容高亮:
部分内容高亮
解决理论:让view能识别html语言,在model层给数据设置上html
解决方案:QAbstractItemDelegate
在这里插入图片描述
具体代码:在QAbstractItemDelegate类中的paint()方法实现:

def paint(self, painter, option, index):
        options = QtWidgets.QStyleOptionViewItem(option)
        self.initStyleOption(options,index)
 
        style = QtGui.QApplication.style() if options.widget is None else options.widget.style()
 
        doc = QtGui.QTextDocument()
        doc.setHtml('<font color="red"><b>&nbsp; Zoom:</b></font> Ctrl+Mouse Scroll'+options.text)
 
        options.text = ""
        style.drawControl(QtWidgets.QStyle.CE_ItemViewItem, options, painter);
 
        ctx = QtGui.QAbstractTextDocumentLayout.PaintContext()
 
        # Highlighting text if item is selected
        #if (optionV4.state & QStyle::State_Selected)
            #ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText));
 
        textRect = style.subElementRect(QtWidgets.QStyle.SE_ItemViewItemText, options)
        painter.save()
        painter.translate(textRect.topLeft())
        painter.setClipRect(textRect.translated(-textRect.topLeft()))
        doc.documentLayout().draw(painter, ctx)
 
        painter.restore()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值