2016-11-09 17 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()