通常我会实现我自己的直接继承的模型,QAbstractItemModel
并为表示功能提供我自己的实现,例如data()
处理我给模型的数据存储容器。
如果您有代码重复使用QList<T>
,std::vector<T>
那么我建议通过执行以下任一操作将一个转换为另一个:
QList<T> list = QList::fromVector(QVector::fromStdVector(vector));
或其他方式。
std::vector<T> vector = qlist.toVector().toStdVector();
我会做后者,但你可以选择任何一个。
根据您的其他评论,您可以采取 2 种行动途径:
路径一:
实施objectA
如下objectB
:
class objectA : baseObject
和
class objectB : baseObject
哪里baseObject
是:
struct baseObject
{
virtual std::string toString() = 0;
};
可能比其他任何东西更容易转换为字符串。
路径 2 将基本上涉及使用std::vector<boost::any>()
作为数据存储容器的模型内部,这样您就可以实现单个模型子类化QAbstractListModel
。
您必须考虑的事情是,如果您的数据存储容器可以使数据表示变得通用,那么您可以做的事情是有限的,因为data()
可以为您提供视图的功能必须返回元素,QVariant
并且它受限于您可以构造它的内容从。