Function indexAt in QTreeView doesn't work correct.
-
I've got same QWidget based class which contains some QTreeView in it's *.ui file. The model class for view is based on QAbstractItemModel. I install event filter to handle contextMenu event of QTreeView.
@m_ui.treeView_Network->installEventFilter(this);@
Then I implement it:
@bool TargetsWidget::eventFilter( QObject * object, QEvent * event ) {if (event->type() == QEvent::ContextMenu) {
QContextMenuEvent * contextEvent = static_cast<QContextMenuEvent *>(event);QMenu menu(m_ui.treeView_Network);
QAction * actionUpdate = new QAction(object);
actionUpdate-> setText(tr("Update"));menu.addAction(actionUpdate);
//connect(actionUpdate, SIGNAL(triggered()), this, SLOT(onExpandAll()));
QModelIndex ndx = m_ui.treeView_Network->indexAt(contextEvent->pos());if (ndx.isValid())
menu.exec(contextEvent->globalPos());
else return false;return true;
} else {
// standard event processing
return QObject::eventFilter(object, event);
}
}@But @QModelIndex ndx = m_ui.treeView_Network->indexAt(contextEvent->pos());@ doesn’t always return true index. If I have for example one item in tree with 3 children and click on header(0 column) indexAt row is 0 and column is 0. But when I click on last child of item it returns(1,-1) and QModelIndex::isValid() returns false, but it’s wrong there is item there. I checked out @contextEvent>pos()@ it returns right coordinates in coordinate system of QTreeView.
-
Check with "mapToParent()":http://qt-project.org/doc/qt-4.8/qwidget.html#mapToParent / "mapFromParent()":http://qt-project.org/doc/qt-4.8/qwidget.html#mapFromParent and other mapTo functions.
eg
@QModelIndex ndx = m_ui.treeView_Network->indexAt(mapToParent(contextEvent->pos()));@
or
@QModelIndex ndx = m_ui.treeView_Network->indexAt(mapFromParent(contextEvent->pos()));@
Written brain to terminal not tested