Иногда возникает необходимость вывести значения контейнера в какой нибудь ...View. Пробежаться циклом не сложно, а если надо дать возможность редактировать, уже сложнее. Решил сделать нечто универсальное — набор моделей-адаптеров использующих для хранения информации переданный при создании указатель на контейнер:
MyMapModelKeysToHeaders — Обвязка вокруг QMap. Значения в колонку(строку), ключи в вертикальный(горизонтальный) заголовок. (Сделан)
MyMapModelKeysToColumn — Обвязка вокруг QMap. Ключи в первый столбец(строку), значения во второй столбец(строку). (Сделан)
MyListModel — Обвязка вокруг QList. Значения в колонку(строку). (В работе)
MyLinkedListModel — Обвязка вокруг QLinkedList. Значения в колонку(строку). (В работе)
MyVectorModel — Обвязка вокруг QVector. Значения в колонку(строку). (В работе)
http://code.google.com/p/qt-containers-to-models/MyMapModelKeysToHeadersМодель-адаптер вокруг QMap. Ключ в заголовке, значения в таблице.
http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystoheader.hhttp://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystocolumn.cpphttp://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapcontainer.hhttp://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/myabstractmapcontainer.hПозволяет связать наследников QAbstractItemView и QMap. Получает указатель на объект QMap и использует его для хранения данных. Из-за того, что макрос Q_OBJECT конфликтует с шаблонами, указатель на QMap необходимо помещать во внутренний адаптер. MyAbstractMapContainer — не шаблонизированный абстрактный адаптер, видимый в наследнике QAbstractItemModel. MyMapContainer — шаблонизированный наследник MyAbstractMapContainer содержащий указатель на QMap.
Пример использования:
...
private:
QMap<QChar, int> * map;
MyAbstractMapContainer *mc;
MyMapModelKeysToHeaders * model;
...
mc = new MyMapContainer<QChar, int>(map));
model = new MyMapModelKeysToHeaders(mc, this))
tableView->setModel(model);
Не сделал добавление новых элементов через модель — не придумал какие значения ключа выставлять. Есть идеи?
MyMapModelKeysToColumnМодель-адаптер вокруг QMap. Ключ в первом столбце(строке), значеия во втором столбце(строке).
http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystocolumn.hhttp://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystocolumn.cpphttp://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapcontainer.hhttp://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/myabstractmapcontainer.hПозволяет связать наследников QAbstractItemView и QMap. Получает указатель на объект QMap и использует его для хранения данных. Из-за того, что макрос Q_OBJECT конфликтует с шаблонами, указатель на QMap необходимо помещать во внутренний адаптер. MyAbstractMapContainer — не шаблонизированный абстрактный адаптер, видимый в наследнике QAbstractItemModel. MyMapContainer — шаблонизированный наследник MyAbstractMapContainer содержащий указатель на QMap.
Пример использования:
...
private:
QMap<QChar, int> * map;
MyAbstractMapContainer *mc;
MyMapModelKeysToColumn * model;
...
mc = new MyMapContainer<QChar, int>(map));
model = new MyMapModelKeysToColumn(mc, this))
tableView->setModel(model);
Может у кого есть идеи как проще(без внутреннего адаптера) обойти конфликт шаблона и Q_OBJECT?
Принимаются замечания, пожелания, конструктивная критика. Если кто захочет присоединится к написанию буду только рад)