Ваш текущий путь фактически близок к тому, что предлагает использовать Qt: вы передаете -1 в качестве роли, чтобы сказать модели, что нужно возвращать ваши пользовательские данные, в то время как Qt рекомендует вам использовать другое значение для роли: Перечисление Qt :: ItemDataRole заканчивается на 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()
.