bool ApiTraceModel::hasChildren(const QModelIndex &parent) const { if (parent.isValid()) { ApiTraceEvent *event = item(parent); if (!event) return false; if (event->type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast<ApiTraceFrame*>(event); return !frame->isEmpty(); } else { Q_ASSERT(event->type() == ApiTraceEvent::Call); ApiTraceCall *call = static_cast<ApiTraceCall*>(event); return call->numChildren() != 0; } } else { return (rowCount() > 0); } }