Обычно я реализовывал бы свою собственную модель, наследующую напрямую от 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
и он ограничен тем, что вы можете построить его из.
person
Karlson
schedule
17.01.2012
QAbstractListModel
илиQAbstractItemModel
? - person Karlson   schedule 17.01.2012abstractitemmodel
как основной тег для фреймворка. - person pmr   schedule 17.01.2012