您当前的方式实际上非常接近 Qt 建议使用的方式:您将 -1 作为角色传递,以告诉模型返回您的自定义数据,而 Qt 鼓励您为角色使用另一个值:Qt::ItemDataRole enumeration ends项目Qt::UserRole
等于。0x0100
正如文档所说,它是第一个可用于特定应用目的的角色。因此,与其将 -1 传递给模型,不如传递Qt::UserRole
. 如果您需要使用其他类型的特定于应用程序的数据,请使用Qt::UserRole + 1
角色。对于其他人,您可以使用Qt::UserRole + N
.
然而,还有另一种方式:正如其中一条评论指出的那样,如果您确定视图中使用了哪个模型,您可以简单地QAbstractItemModel
转换为您的特定模型并使用一些特定于模型的 API 来提取您需要的数据:
void MyView::selectionChanged(const QItemSelection & selected, const QItemSelection & deselect)
{
MyModel * myModel = qobject_cast<MyModel*>(model());
if (!myModel) {
// Whoops, something went wrong, not the right model!
<...> // process it somehow
return;
}
<...> // Use myModel to retrieve the required data using convenient model-specific API
}
如果您需要从 中获取模型QModelIndex
,只需使用qobject_cast
如上所示QModelIndex::model()
。