Обычно я реализую свою собственную модель, унаследованную от QAbstractItemModel
напрямую, и предоставляю свою собственную реализацию для функций представления, таких как data()
, для обработки контейнера хранения данных. Я даю модель.
Если у вас естьдублирование кода для использования QList<T>
и std::vector<T>
, тогда я бы предложил преобразовать одно в другое, выполнив:
QList<T> list = QList::fromVector(QVector::fromStdVector(vector));
или другим способом.
std::vector<T> vector = qlist.toVector().toStdVector();
Я бывыполните последнее, но вы можете выбрать любой из них.
На основе ваших дополнительных комментариев вы можете предпринять 2 пути действий:
Путь 1:
Реализация objectA
иobjectB
следующим образом:
class objectA : baseObject
и
class objectB : baseObject
где baseObject
:
struct baseObject
{
virtual std::string toString() = 0;
};
Возможно, проще преобразовать в строку, чем что-либо еще.
Путь 2 в основном будет включать в себя модель, используя std::vector<boost::any>()
в качестве контейнера хранения данных, таким образом, вы можете реализовать единый подкласс модели QAbstractListModel
.
То, что вы должны учитыватьчто если ваш контейнер для хранения данных выВозможно, вы сможете использовать представление данных, ограниченное вами, тем, что вы можете сделать, потому что функция data()
, которая будет отображать ваш элемент, должна возвращать QVariant
, и она ограничена тем, из чего вы можете построить его.