Python 为什么在sizeHint中设置的QSize高度会返回一个具有两倍高度的QRect?

Python 为什么在sizeHint中设置的QSize高度会返回一个具有两倍高度的QRect?,python,pyside2,qitemdelegate,sizehint,Python,Pyside2,Qitemdelegate,Sizehint,我觉得我错过了一些非常明显的东西,但却找不到任何东西 我有一个自定义项委托,我将其sizeHint高度设置为50,但print语句返回的矩形是高度的两倍 def sizeHint(self, option, index): print("sizehint:", option.rect) s = QtCore.QSize() s.setWidth(option.rect.width()) s.setHeight(50) return s #output s

我觉得我错过了一些非常明显的东西,但却找不到任何东西

我有一个自定义项委托,我将其sizeHint高度设置为50,但print语句返回的矩形是高度的两倍

def sizeHint(self, option, index):
    print("sizehint:", option.rect)
    s = QtCore.QSize()
    s.setWidth(option.rect.width())
    s.setHeight(50)
    return s

#output
sizehint: PySide2.QtCore.QRect(0, 0, 498, 100)
“option.rect”是视图建议的矩形,它考虑了代理在绘制或交互时必须参考的通用信息(例如字体大小、标题宽度等),但矩形不考虑每个元素的信息(您要显示的信息),因此委托会提供sizeHint()作为建议的大小。实际上,如果您想获得默认大小,则应使用super

def sizeHint(self, option, index):
    default_size_hint = super().sizeHint(option, index)
    print("sizehint:", default_size_hint)
    return QtCore.QSize(option.rect.width(), 50)
“option.rect”是视图建议的矩形,它考虑了代理在绘制或交互时必须参考的通用信息(例如字体大小、标题宽度等),但矩形不考虑每个元素的信息(您要显示的信息),因此委托会提供sizeHint()作为建议的大小。实际上,如果您想获得默认大小,则应使用super

def sizeHint(self, option, index):
    default_size_hint = super().sizeHint(option, index)
    print("sizehint:", default_size_hint)
    return QtCore.QSize(option.rect.width(), 50)

很抱歉,无论我多久读一次你的回复,我都不明白。而且我也不明白为什么传递给paint方法的option.rect与sizeHint生成的option.rect完全不同。@Vortek我用一个简单的例子来解释:假设列的标题是“StackOverflow”,所以最小大小(默认情况下也是如此)将该单词的长度(该长度取决于字体)作为参考,但该列中某个项目的文本为“SO”,因此绘制所需的长度显然不同,因为“StackOverflow”和“SO”的长度,第一个用于计算“option.rect”,第二个用于计算sizeHint(默认值,因为如果覆盖该方法,可以设置任何值)@Vortek如果你不理解这个示例,那么你必须检查源代码:对不起,无论我多久读一次你的回复,我都不理解。我也不明白为什么传递给paint方法的option.rect与sizeHint生成的完全不同。@Vortek我用一个简单的例子解释:让我们假设列的标题为“StackOverflow”,因此最小大小(默认情况下)将该单词的长度作为参考(该长度取决于字体),但该列中某个项目的文本为“so”,因此显然绘制所需的长度不同,因为“StackOverflow”和“so”的长度不同,第一个用于计算“option.rect”,第二个用于计算sizeHint(默认值,因为如果该方法被重写,则可以设置任何值)。@Vortek如果您不理解该示例,则必须检查源代码: