短版
运行resizeColumnsToContents可以很好地处理常规文本,但是当我将文本更改为粗体时,列太窄。如何在自定义委托中修正sizeHint以考虑到我的文本是粗体的?
详细信息
我使用自定义委托使文本在列中粗体。要做到这一点,在委托的paint方法中,在感兴趣的列中,我只运行option.font.setWeight(QtGui.QFont.Bold)。
但是,当将列调整为内容时,带有粗体文本的列太窄。我试图按照以下方式在委托中重新实现sizeHint,但它生成的列与默认实现的大小完全相同:
def sizeHint(self, option, index):
fontMetrics = option.fontMetrics
if index.column() == 0:
text = index.model().data(index)
document = QtGui.QTextDocument(text)
document.setDefaultFont(option.font)
return QtCore.QSize(document.idealWidth(), fontMetrics.height())
return QtGui.QStyledItemDelegate.sizeHint(self, option, index) 那么,我如何才能让sizeHint正确地识别出我大胆字体的宽度呢?看来我只是在这里发送纯文本。
相关问题
发布于 2014-12-12 15:00:46
基于Pie_Jesu的注释,我在计算宽度之前插入了option.font.setWeight(QtGui.QFont.Bold)。因此,sizeHint的结果如下:
def sizeHint(self, option, index):
fontMetrics = option.fontMetrics
if index.column() == 0:
text = index.model().data(index)
document = QtGui.QTextDocument(text)
option.font.setWeight(QtGui.QFont.Bold) #new line
document.setDefaultFont(option.font)
return QtCore.QSize(document.idealWidth(), fontMetrics.height())
return QtGui.QStyledItemDelegate.sizeHint(self, option, index) 因此,基本上,无论您用paint函数中的文本设置了什么属性,在sizeHint中匹配该宽度的一种方法是显式地在这些属性中构建。
它可以工作,但似乎可疑代码重复设置文本属性两次,一次在paint中,然后再在sizeHint中。应该有一种更模块化的方式。也就是说,sizeHint直接从正在显示的项读取格式的一种方法。
编辑补充说:这基本上就是这些事情的工作原理。在加号上,通过使用QTextDocument,您只设置了一个文档,而不是将它附加到QTextEdit上以供显示,因此这里实际上没有太多开销。
https://stackoverflow.com/questions/27433165
复制相似问题