Как отключить определенные элементы в ListView на основе QAbstractListModel?

У меня есть QAbstractListModel Класс модели C++ и QtQuick2 ListView,

Для тестирования я также создаю QtWidgets QListView и приложите к той же модели для сравнения.

Я хочу сказать, какие элементы должны быть отключены, используя переопределенные QAbstractListModel::flags() как в этом примере:

Qt::ItemFlags flags(const QModelIndex& index) const
{
    Qt::ItemFlags f = QAbstractListModel::flags(index);
    if(index.isValid())
    {
        f |= Qt::ItemIsUserCheckable;

        if(index.row() % 3 == 2)
            f &= ~Qt::ItemIsEnabled;
    }
    return f;
}

Полный модельный класс здесь

К сожалению, QtQuick2 ListVie полностью игнорирует этот флаг, в то время как QListView не делает:

Слева: QtWidgets QListView, Справа: QtQuick2 ListView

Я хочу, чтобы item2 и item5 также были отключены в QtQuick2. Как этого добиться?

1 ответ

Если вы используете CheckDelegate, вы должны настроить его через свойства делегата:

   delegate: CheckDelegate {
        text: model.display
        checked: model.checkState
        enabled: <here is your predicate, for example "index % 2" for each odd item>
    }

Это потому, что QML использует другой подход для визуализации данных в отличие от QWidgets.

Другие вопросы по тегам