Название: Адаптер контейнеров (QList, QMap и т.д) к моделям (QAbstractItemView) Отправлено: _KoT_ от Февраль 20, 2011, 15:47 Иногда возникает необходимость вывести значения контейнера в какой нибудь ...View. Пробежаться циклом не сложно, а если надо дать возможность редактировать, уже сложнее. Решил сделать нечто универсальное — набор моделей-адаптеров использующих для хранения информации переданный при создании указатель на контейнер:
MyMapModelKeysToHeaders — Обвязка вокруг QMap. Значения в колонку(строку), ключи в вертикальный(горизонтальный) заголовок. (Сделан) MyMapModelKeysToColumn — Обвязка вокруг QMap. Ключи в первый столбец(строку), значения во второй столбец(строку). (Сделан) MyListModel — Обвязка вокруг QList. Значения в колонку(строку). (В работе) MyLinkedListModel — Обвязка вокруг QLinkedList. Значения в колонку(строку). (В работе) MyVectorModel — Обвязка вокруг QVector. Значения в колонку(строку). (В работе) http://code.google.com/p/qt-containers-to-models/ (http://code.google.com/p/qt-containers-to-models/) MyMapModelKeysToHeaders Модель-адаптер вокруг QMap. Ключ в заголовке, значения в таблице. http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystoheader.h (http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystoheader.h) http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystocolumn.cpp (http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystocolumn.cpp) http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapcontainer.h (http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapcontainer.h) http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/myabstractmapcontainer.h (http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/myabstractmapcontainer.h) Позволяет связать наследников QAbstractItemView и QMap. Получает указатель на объект QMap и использует его для хранения данных. Из-за того, что макрос Q_OBJECT конфликтует с шаблонами, указатель на QMap необходимо помещать во внутренний адаптер. MyAbstractMapContainer — не шаблонизированный абстрактный адаптер, видимый в наследнике QAbstractItemModel. MyMapContainer — шаблонизированный наследник MyAbstractMapContainer содержащий указатель на QMap. Пример использования: Код: ... MyMapModelKeysToColumn Модель-адаптер вокруг QMap. Ключ в первом столбце(строке), значеия во втором столбце(строке). http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystocolumn.h (http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystocolumn.h) http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystocolumn.cpp (http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapmodelkeystocolumn.cpp) http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapcontainer.h (http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/mymapcontainer.h) http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/myabstractmapcontainer.h (http://qt-containers-to-models.googlecode.com/svn/trunk/MyMapModel/src/myabstractmapcontainer.h) Позволяет связать наследников QAbstractItemView и QMap. Получает указатель на объект QMap и использует его для хранения данных. Из-за того, что макрос Q_OBJECT конфликтует с шаблонами, указатель на QMap необходимо помещать во внутренний адаптер. MyAbstractMapContainer — не шаблонизированный абстрактный адаптер, видимый в наследнике QAbstractItemModel. MyMapContainer — шаблонизированный наследник MyAbstractMapContainer содержащий указатель на QMap. Пример использования: Код: ... Может у кого есть идеи как проще(без внутреннего адаптера) обойти конфликт шаблона и Q_OBJECT? Принимаются замечания, пожелания, конструктивная критика. Если кто захочет присоединится к написанию буду только рад) |