在下面的屏幕截图中,QListWidget
随机填充了many QListWIdgetItems
,wordWrap
enabled和scrollBar
右侧的a (请注意选中的项)。
我追求的是每个(可见)QListWidgetItem
相对于的y位置QListWidget.viewport()
。
到目前为止,我通过在的y范围内遍历QListWidget.viewport().geometry()
的像素距离等于行高(此处为29个像素)itemAt(0,y)
来实现此目标QListWidget
,将应用于,然后将主要项目添加到列表(如果尚未准备好)它。
代码就像:
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坐标吗?
您可以获取模型索引的列表,然后在它们上循环并调用QListWidget.visualRect
以获取项目/索引在本地视口坐标中的位置
for row in range(listwidget.count()):
index = listwidget.model().index(row)
rect = listwidget.visualRect(index)
print rect.y()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句