2

以下のスクリーンショットでは、QListWidget多数の がランダムに取り込まれQListWIdgetItemswordWrap有効になってscrollBarおり、右側に が表示されています (選択された項目に注意してください)。

私がQListWidgetItem求めているのは、 に対する各 (目に見える) の y 位置ですQListWidget.viewport()

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 座標を見つけるスマートな方法はありますか?

ここに画像の説明を入力

4

1 に答える 1

1

モデル インデックスのリストを取得し、それらをループして呼び出しQListWidget.visualRectて、ローカル ビューポート座標でアイテム/インデックスの位置を取得できます。

for row in range(listwidget.count()):
    index = listwidget.model().index(row)
    rect = listwidget.visualRect(index)
    print rect.y()
于 2016-11-09T18:23:22.780 に答える