首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为委托中的粗体文本重新实现sizeHint?(Qt)

如何为委托中的粗体文本重新实现sizeHint?(Qt)
EN

Stack Overflow用户
提问于 2014-12-11 21:56:55
回答 1查看 2K关注 0票数 2

短版

运行resizeColumnsToContents可以很好地处理常规文本,但是当我将文本更改为粗体时,列太窄。如何在自定义委托中修正sizeHint以考虑到我的文本是粗体的?

详细信息

我使用自定义委托使文本在列中粗体。要做到这一点,在委托的paint方法中,在感兴趣的列中,我只运行option.font.setWeight(QtGui.QFont.Bold)

但是,当将列调整为内容时,带有粗体文本的列太窄。我试图按照以下方式在委托中重新实现sizeHint,但它生成的列与默认实现的大小完全相同:

代码语言:javascript
复制
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正确地识别出我大胆字体的宽度呢?看来我只是在这里发送纯文本。

相关问题

QLabel sizehint is too small

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-12 15:00:46

基于Pie_Jesu的注释,我在计算宽度之前插入了option.font.setWeight(QtGui.QFont.Bold)。因此,sizeHint的结果如下:

代码语言:javascript
复制
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上以供显示,因此这里实际上没有太多开销。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27433165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档