Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 动态控制QItemDelegate的大小_Qt_Pyqt_Pyside - Fatal编程技术网

Qt 动态控制QItemDelegate的大小

Qt 动态控制QItemDelegate的大小,qt,pyqt,pyside,Qt,Pyqt,Pyside,我有几个关于a中的尺寸的问题: 我有一个示例,它使用代理的自定义方法呈现小部件,如下所示: self.thumbnail = MyCustomWidget() self.thumbnail.render(painter, QtCore.QPoint(option.rect.x(), option.rect.y())) 但是,这将在中显示具有250x260图像的项目,即使是250x250,其maximumSize()也会返回250x250 我发现罪魁祸首是我设定为10的。如果我将设置为100,我

我有几个关于a中的尺寸的问题:

我有一个示例,它使用代理的自定义方法呈现小部件,如下所示:

self.thumbnail = MyCustomWidget()
self.thumbnail.render(painter, QtCore.QPoint(option.rect.x(), option.rect.y()))
但是,这将在中显示具有250x260图像的项目,即使是250x250,其maximumSize()也会返回250x250

我发现罪魁祸首是我设定为10的。如果我将设置为100,我仍然会得到250x260的大小,但是如果我根本不使用它,它将以250x250的预期渲染。 似乎更改了传递到paint方法中的.rect,导致大小不正确。 我确实需要它,所以我有点困惑为什么的间距会改变的大小?这是虫子吗

我可以通过先渲染a来解决此问题,然后让绘制而不是直接渲染到:

self.thumbnail = MyCustomWidget()
pixmap = QtGui.QPixmap(self.thumbnail.size())
self.thumbnail.render(pixmap)
painter.drawPixmap(option.rect.topLeft(), pixmap)
这会产生250x250的图像,这正是我所需要的,但我不明白为什么第一种方法在我使用时没有呈现正确的大小

现在,更大的挑战是如何通过一个: 我在中有一个用于缩放项目的,以便用户可以选择在当前视图中查看更小但更多的项目。我测试了MyCustomWidget()的一个独立实例的大小调整,效果很好

然而,这些代表将无法按预期进行缩放。这是我的代理代码: 类委托(QtGui.QItemDelegate):

在中,我使用此插槽连接到滑块的valueChanges信号:

def scaleThumbnails(self, value):
    self.itemDelegate().setScaleValue(value)
    self.update()
结果是将裁剪s而不是缩放s,因为只有在第一次显示时才会调用。 此外,我需要确保当小部件(最终)缩小时,会重新计算的布局,并在可见区域中容纳更多的项目

简而言之,我的问题是:

  • 如何在内部动态缩放s
  • 在代理大小更改后,如何强制重新计算其布局
  • edit:至于第2期:似乎可以做到这一点。但仍对第1期感到疑惑

    谢谢,
    frank

    发现问题出在我的代码的上下文上,而不是委托人。 我在将小部件渲染到pixmap之前对其进行了缩放,这当然会使编辑器正确缩放,但当它不处于编辑状态时,则不会对其进行缩放。 因此,解决方案只是在从小部件渲染后缩放pixmap,例如:

    scaledPixmap = pixmap.scaled(pixmap.size() * self.scaleValue / 100.0)
    painter.drawPixmap(option.rect.topLeft(), scaledPixmap)
    
    scaledPixmap = pixmap.scaled(pixmap.size() * self.scaleValue / 100.0)
    painter.drawPixmap(option.rect.topLeft(), scaledPixmap)