QModelIndex ApiTraceModel::parent(const QModelIndex &index) const { if (!index.isValid()) return QModelIndex(); ApiTraceEvent *event = item(index); if (event->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast<ApiTraceCall*>(event); if (call->parentCall()) { ApiTraceCall *parentCall = call->parentCall(); ApiTraceEvent *topEvent = parentCall->parentEvent(); return createIndex(topEvent->callIndex(parentCall), 0, parentCall); } else { Q_ASSERT(call->parentFrame()); return createIndex(call->parentFrame()->number, 0, call->parentFrame()); } } return QModelIndex(); }