我有一个我想要与QVariant一起使用的自定义类型,但我不知道如何让QVariant显示在表中或让它在QSortFilterProxyModel中排序。
我使用Q_DECLARE_METATYPE注册了这个类型,并编写了通过qRegisterMetaTypeStreamOperators注册的流媒体操作符,但无论出于何种原因,当我使用带有表模型的类型时,它不会显示任何内容而且不会排序。
我应该指定无法修改此自定义类型。它有一个复制和默认构造函数,但我无法进入并修改源代码以使其与QVariant一起使用。有没有一种方法可以非侵入性地获得我想要的行为?
答案 0 :(得分:4)
<强>显示强>:
听起来你的模型没有为DisplayRole
返回合理的内容。用于显示模型中所有内容的QAbstractItemDelegate(通常为QStyledItemDelegate)需要了解如何为Qt::DisplayRole
呈现data()
返回的内容。< / p>
您有两个主要选择:
如果您要编辑该类型的项目,则需要致电registerEditor,以便将自定义类型与编辑器相关联。请参阅QItemEditorFactory documentation。
<强>排序强>:
您不能依赖QVariant的比较运算符,因为它不适用于自定义类型,因此您需要实现QSortFilterProxyModel::lessThan
以进行自定义排序。