通常我会实现我自己的直接继承的模型,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并且它受限于您可以构造它的内容从。