Сортировка и отображение пользовательского типа QVariant - PullRequest
2 голосов
/ 03 мая 2010

У меня есть пользовательский тип, который я хотел бы использовать с QVariant, но я не знаю, как заставить QVariant отображать в таблице или сортировать его в QSortFilterProxyModel.

Я зарегистрировал тип в Q_DECLARE_METATYPE и написал потоковые операторы, зарегистрированные через qRegisterMetaTypeStreamOperators, но по любой причине, когда я использую тип с табличной моделью, он ничего не отображает и не сортирует.

Я должен указать, что этот пользовательский тип не может быть изменен. У него есть конструктор копирования и по умолчанию, но я не могу войти и изменить исходный код, чтобы заставить его работать с QVariant. Есть ли способ ненавязчиво получить поведение, которое я хотел бы?

1 Ответ

4 голосов
/ 03 мая 2010

Дисплей :

Похоже, ваша модель не возвращает разумного контента для DisplayRole. QAbstractItemDelegate (часто QStyledItemDelegate ), который используется для отображения всего содержимого из модели, должен понимать, как отображать содержимое, возвращаемое data() дляQt::DisplayRole.

У вас есть два основных варианта:

  1. Измените вашу модель так, чтобы она возвращала разумное значение Qt :: DisplayRole , ИЛИ
  2. Создайте подкласс одного из существующих делегатов и измените его так, чтобы он мог правильно отображать ваш пользовательский тип варианта.

Если вы хотите редактировать элементы этого типа, вам нужно вызвать registerEditor , чтобы вы могли связать свой пользовательский тип с редактором.См. документацию QItemEditorFactory .

Сортировка :

Вы не можете полагаться на оператор сравнения для QVariant , так какне работает с пользовательскими типами, поэтому вам нужно реализовать QSortFilterProxyModel::lessThan, чтобы иметь пользовательскую сортировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...