PyQt4:如何获取QlistWidget的可见项列表?

时间:2014-03-27 09:59:32

标签: pyqt4 visible qlistwidget

我试图动态加载(在其他线程中,因此它不会阻止)QlistWidget中的项目的不同图标。但是列表很大,所以我只对加载在那个精确时间显示的项目的图标感兴趣。 有没有办法获取QlistWidget的可见项列表?

由于

2 个答案:

答案 0 :(得分:1)

获取可查看区域顶部和底部的索引,然后迭代它们包含的索引范围:

def visibleItems(listwidget):
    rect = listwidget.viewport().contentsRect()
    top = listwidget.indexAt(rect.topLeft())
    if top.isValid():
        bottom = listwidget.indexAt(rect.bottomLeft())
        if not bottom.isValid():
            bottom = listwidget.model().index(listwidget.count() - 1)
        for index in range(top.row(), bottom.row() + 1):
            yield listwidget.item(index)

答案 1 :(得分:0)

虽然我得到了更好的方法,但我发现了一种丑陋的方法:

rectangle = parent.geometry()    
midx = rectangle.left() + (( rectangle.right() - rectangle.left()) / 2)    
y=rectangle.top()
itemlist = []
while y < rectangle.bottom():
    y +=  10 # random value just to not check every pixel.
    item = parent.itemAt(midx, y)
    if item not in itemlist and item is not None:                
        itemlist.append(item)  

更好的解决方案?