У меня есть древовидная полиморфная структура данных, где узлы являются экземплярами класса Node (реализованного мной) или любого его подкласса. Мое приложение интенсивно использует Boost, и узлы фактически представлены типом boost :: shared_ptr, а не Node*
.
Теперь я хочу создать модель Qt, чтобы обернуть мою древовидную структуру данных. Поэтому мне нужен способ связать любой модельный индекс с узлом в моей внутренней структуре данных. И тут возникает проблема:
Qt поддерживает два способа сделать это:
Первый:
QModelIndex QAbstractItemModel::createIndex ( int row, int column, void * ptr = 0 ) const
Создает модельный индекс для данного
строка и столбец с внутренним
указатель ptr.
И второй:
QModelIndex QAbstractItemModel::createIndex ( int row, int column, quint32 id ) const
Создает модельный индекс для данного
строка и столбец с внутренним
идентификатор, идентификатор.
Хорошо, а как именно я должен связать узел в моем случае? Нет возможности связать shared_ptr с модельным индексом ... Да, я знаю, я могу получить необработанный указатель от моего shared_ptr и поставить его на CreateIndex()
, но он плохо пахнет - мне кажется слишком небезопасным.
Есть идеи?
Кстати, я чувствую, что в целом интеграция Boost / Qt, кажется, не тривиальна, по крайней мере, в области управления памятью.
10х много.