Что должен возвращать перегруженный QAbstractItemModel :: flags для недопустимого QModelIndex?

Я читаю документацию QT по архитектуре модель / представление https://doc.qt.io/qt-5/model-view-programming.html#making-the-model-editable и просмотрите пример перегрузки метода QAbstractItemModel :: flags, который возвращает Qt::ItemIsEnabled для недопустимого индекса:

Qt::ItemFlags StringListModel::flags(const QModelIndex &index) const
{
    if (!index.isValid())
        return Qt::ItemIsEnabled;

    return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
}

Итак, если индекс недействителен, т.е. может иметь отрицательную строку, мы все равно считаем, что пользователь может с ним взаимодействовать. Есть ли смысл в такой логике? Для меня возврат Qt::NoItemFlags в этом случае мог бы быть более логичным


person user3514538    schedule 31.03.2019    source источник
comment
Мне никогда не приходилось этого делать. В этом примере нет необходимости, это «ошибка»: это безобидная ошибка, поскольку невозможно взаимодействовать с элементами, имеющими недопустимые индексы. Таким образом, возвращаемое значение не используется. Для недопустимых элементов просто верните значение по умолчанию, т.е. if (!index.isValid()) return {};   -  person Kuba hasn't forgotten Monica    schedule 31.03.2019


Ответы (1)


Вам нужно Qt::NoItemFlags: https://doc.qt.io/Qt-5/qt.html#ItemFlag-enum.

Это значение по умолчанию для перечисления флагов (поскольку это первый элемент в перечислении). Вы также можете записать его как return {};, и он даст вам то же самое Qt::NoItemFlags.

person user3132457    schedule 31.03.2019