我想使用创建自定义列表QListView
,因此我必须扩展QListView
,QItemDelegate
然后QAbstractListModel
实现特定方法,以及QAbstractItemModel::data(const QModelIndex & index, int role = Qt::DisplayRole) const
. 乍一看它在屏幕上正确显示,但在填充列表模型后出现问题。,该函数被每个具有不同角色data(index,role)
的项目模型调用 4-5 次(其中一些未定义角色/超出范围/可能是随机的)。而且它不仅发生在列表模型初始化之后!当我悬停一个列表元素时,视图会使用正确的索引和角色调用 data(index,role),但之后会再次使用意外的角色值调用它。
这似乎是一种尴尬的行为。我找不到奇怪电话的来源。我将日志放入自定义类的每个方法中,以确保我不会错误地调用data(index,role)
具有错误值的方法。
有没有人有一些想法在哪里看或为什么会发生这种奇怪的电话?
编辑 “奇怪”调用的来源在:
QSize CDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const
{
return QSize(QItemDelegate::sizeHint(option, index));
}
以某种方式调用QItemDelegate::sizeHint()
它时会触发data()
具有不同角色值的触发器。
在我的例子中,我定义了从 0(0,1,2,3) 开始的角色值。根据@Jens,这些值是保留的。更改自定义角色的起始值解决了我的问题。