如何基于QAbstractListModel禁用ListView中的某些项?

时间:2017-07-20 11:33:55

标签: qt5 qtquick2 qabstractlistmodel

我有一个QListView C ++模型类和一个QtQuick2 QAbstractListModel::flags()

出于测试目的,我还创建了一个QtWidgets 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; } 并附加到同一模型进行比较。

我想告诉视图应该使用覆盖的{{1}}禁用哪些项目,如下例所示:

{{1}}

Complete model class here

可悲的是,QtQuick2 ListVie完全忽略了这个标志,而QListView没有:

Left: QtWidgets QListView, Right: QtQuick2 ListView

我希望在QtQuick2中也禁用item2和item5。如何实现?

1 个答案:

答案 0 :(得分:0)

如果您使用CheckDelegate,则应通过委托属性对其进行调整:

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

这是因为QML使用不同的方法来显示与QWidgets相反的数据。