Is there a way to get "visual row" of a given QModelIndex?

Let's say we have a tree with some nodes expanded and some not. For example, take a partially expanded tree and click on a last item:

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

I want to know that item I clicked is in the 5th row, programmatically. QModelIndex's rows and columns are not helpful, as there is hierarchy here.

有帮助吗?

解决方案

If all of your rows have the same height, you can compute the visual row like this:

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
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top