Более простой способ найти видимую строку QModelIndex в QTreeView - PullRequest
3 голосов
/ 25 ноября 2011

Есть ли способ получить "визуальную строку" данного QModelIndex?

Допустим, у нас есть дерево с некоторыми развернутыми узлами, а некоторые нет.Например, возьмите частично развернутое дерево и щелкните по последнему элементу:

item1    # (visual) row 1
  item2  # 2
  item5  # 3
item7    # 4
  item8  # 5 <-- click here

Я хочу знать, что элемент, который я щелкнул, находится в 5-й строке программным путем.Строки и столбцы QModelIndex не полезны, так как здесь есть иерархия.

1 Ответ

2 голосов
/ 23 июня 2012

Если все ваши строки имеют одинаковую высоту, вы можете вычислить визуальный ряд следующим образом:

int visual_row(const QTreeView *tv, const QModelIndex &mi)
{
    const QRect visualRect = tv->visualRect(mi);
    if (visualRect.isValid())
        return visualRect.y() / visualRect.height();
    else
        return -1; // invisible
}
...