在QItemDelegate子类中实现sizeHint

1 投票
1 回答
1683 浏览
提问于 2025-04-17 07:46

我正在尝试创建一个表格,每个项目包含一对行,像这样:

在这里输入图片描述

理想情况下,顶部行的字体应该和其他行不同(而不仅仅是加粗)。

我的解决方案是创建一个QItemDelegate的子类,并重写paintsizeHint这两个方法。上面的图示显示paint工作得很好,但我还没弄明白sizeHint该怎么做。以下是我尝试的代码(目前只处理单行元素):

def sizeHint(self, option, index):
    index_data = index.data(Qt.SizeHintRole)
    if index_data is None:
        return QSize()
    size = QItemDelegate.textRectangle(None,
                                       textLayoutBounds(option),
                                       option.font, str(index_data))
    return size

不幸的是,在PyQt中,受保护的成员函数textRectangle(由默认的sizeHint调用)无法访问。那我该怎么做才对呢?

1 个回答

0

我没有你问题的完整答案。不过,如果你想计算文本的矩形区域,可以看看 QFontMetrics.boundingRect 这个链接。另外,你可能会对 这个回答 中提到的富文本项目代理感兴趣。

撰写回答