2016-11-09 23 views
2

在下面的屏幕截图是QListWidget与许多​​随机填充,启用wordWrap,并与在右侧一个scrollBar(注意选择的项目)。PyQt的派生QListWidgetItems的Y象素坐标当前可见在QListWidget

我所追求的是每个(可见的)QListWidgetItem相对于QListWidget.viewport()的y位置。

现在,我通过走在QListWidget.viewport().geometry()与像素距离相当于白线高度(这里:29个像素)一个的y范围达到此目的,施加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坐标?

enter image description here

回答

1

你可以得到的模型索引列表,然后遍历它们,并呼吁QListWidget.visualRect得到当地视项目/索引的位置坐标

for row in range(listwidget.count()): 
    index = listwidget.model().index(row) 
    rect = listwidget.visualRect(index) 
    print rect.y()