在下面的屏幕截图中,QListWidget
随机填充了许多QListWIdgetItems
,已wordWrap
启用,scrollBar
右侧带有 a(注意所选项目)。
我所追求的是每个(可见)QListWidgetItem
相对于QListWidget.viewport()
.
到目前为止,我通过在 y 范围内行走来实现这一点,QListWidget.viewport().geometry()
像素距离等于行高(这里:29 像素),将 aitemAt(0,y)
应用于 theQListWidget
并将 fount 项目附加到列表中,如果它们还没有在它。
代码就像:
def reportItems(self):
l = self.listWidget
dy = l.item(0).font().pointSize()
ystart = l.viewport().geometry().y()
h = l.viewport().geometry().height()
print ystart, h, dy
itlist = []
itcomplist = []
for y in range(ystart, ystart+h, (29/8)*dy): #empirical value
i = l.itemAt(0, y)
if not i in itlist:
itlist.append(i)
itcomplist.append((y, l.row(i)))
for it in itcomplist:
y, i = it
print y, l.item(i).text()[:30]
这种方式对我来说似乎不是很优雅,因为它很慢并且执行冗余查询。
有没有更聪明的方法来找到所有的 y 坐标?