Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Easier way to find visible row of a QModelIndex in a QTreeView

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.

like image 207
Vasaka Avatar asked Dec 22 '25 00:12

Vasaka


1 Answers

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
}
like image 135
Marc Mutz - mmutz Avatar answered Dec 23 '25 13:12

Marc Mutz - mmutz