Я хочу, чтобы создать пользовательский список, используя QListView
и поэтому мне пришлось продлить QListView
, QItemDelegate
и QAbstractListModel
, а затем реализовать конкретные методы, наряду с QAbstractItemModel::data(const QModelIndex & index, int role = Qt::DisplayRole) const
. Он отображает корректно на экране с первого взгляда, но проблема возникает после заполнения модели списка. Функция data(index,role)
называется 4-5 раз для каждой модели модели с различными ролями (некоторые из них не определены роли/вне диапазона/вероятно, случайным). И это происходит не только после инициализации модели списка! Когда я наведите элемент списка, вид вызывает данные (индекс, роль) с правильным индексом и ролью, но сразу же это снова вызвано с неожиданным значением роли.данные функции Qt QAbstractItemModel() называется с неопределенной роли
Это кажется неудобным поведением. I не смог найти источник странных звонков. Я помещал журналы в каждый метод своих пользовательских классов, чтобы убедиться, что я не вызываю по ошибке метод data(index,role)
с неправильными значениями.
Есть ли у кого-нибудь идеи, где искать или почему возникают эти странные вызовы?
EDIT Источник из «странных» вызывает в:
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 эти значения зарезервированы. Изменение начального значения моих пользовательских ролей решило мою проблему.
Каковы упомянутые «неопределенные роли»? Каковы их ценности? – vahancho
Я определил 4 роли (0,1,2,3), но функция data() вызывает 6 последовательных раз для каждого элемента со следующими ролями: 13,1,6,0,6,10 –
Пользовательские роли начинаются с 0x100, 0..3 - роли, определенные Qt. См. Список ролей в qnamespace.h. 13 например ist SizeHintRole. – Jens