C++ 排序和显示自定义QVariant类型

C++ 排序和显示自定义QVariant类型,c++,qt,C++,Qt,我有一个自定义类型,我想与QVariant一起使用,但我不知道如何让QVariant在表中显示或在QSortFilterProxyModel中排序 我用Q_DECLARE_元类型注册了该类型,并编写了通过qRegisterMetaTypeStreamOperators注册的流式运算符,但无论出于何种原因,当我将该类型与表模型一起使用时,它不会显示任何内容,也不会排序 我应该指定不能修改此自定义类型。它有一个副本和默认构造函数,但我无法进入并修改源代码以使其与QVariant一起工作。是否有一种非

我有一个自定义类型,我想与QVariant一起使用,但我不知道如何让QVariant在表中显示或在QSortFilterProxyModel中排序

我用Q_DECLARE_元类型注册了该类型,并编写了通过qRegisterMetaTypeStreamOperators注册的流式运算符,但无论出于何种原因,当我将该类型与表模型一起使用时,它不会显示任何内容,也不会排序


我应该指定不能修改此自定义类型。它有一个副本和默认构造函数,但我无法进入并修改源代码以使其与QVariant一起工作。是否有一种非侵入式获取我想要的行为的方法?

显示

听起来您的模型没有为
DisplayRole
返回合理的内容。用于显示模型中所有内容的(通常是a)需要了解如何呈现为
Qt::DisplayRole
返回的内容

您有两个主要选择:

  • 修改模型,使其返回合理的
  • 对一个现有委托进行子类化,并对其进行修改,使其能够正确显示自定义变量类型
  • 如果要编辑该类型的项,则需要调用,以便将自定义类型与编辑器关联。看

    排序


    您不能依赖比较运算符,因为它不适用于自定义类型,因此您需要实现自定义排序。

    谢谢您的回复。DisplayRole的data()返回的内容是包含自定义数据结构的QVariant。我应该退回一些不同的东西吗?我是否需要进入每个使用此自定义类型的模型,并反复应用相同的逻辑?这听起来需要做很多工作,但这可能是唯一的解决方案。您需要更改每个模型,或者在需要呈现自定义变量类型的每个视图上引入一个委托。您应该能够子类化
    QStyledItemDelegate
    并实现
    displayText
    ,以便它将自定义变量类型转换为字符串进行呈现。然后您可以调用
    yourView->setItemDelegate*()
    来使用它。