【问题标题】:Why does a QSize height set in sizeHint return a QRect with double the height?为什么在 sizeHint 中设置的 QSize 高度会返回两倍高度的 QRect?
【发布时间】:2020-08-05 18:38:54
【问题描述】:

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

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

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)

【问题讨论】:

    标签: python pyside2 qitemdelegate sizehint


    【解决方案1】:

    “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产生的完全不同。
    • @Vortek 我用一个简单的例子来解释:假设列的标题是“StackOverflow”,因此最小大小(默认情况下)以该单词的长度(该长度取决于字体)但该列的项目的文本是“SO”所以显然绘画所需的长度是不同的,因为“StackOverflow”和“SO”的长度,第一个用于计算“option.rect”第二个用于 sizeHint(默认值,因为如果该方法被覆盖,则可以设置任何值)。
    • @Vortek 如果即使使用示例您也无法理解,那么您将不得不检查源代码:code.qt.io/cgit/qt/qtbase.git/tree/src/widgets/itemviews/…
    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 2022-10-02
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多