我有一个树状多态数据结构,其中节点是类节点(由我实现)或其任何子类的实例。我的应用程序大量使用Boost,节点实际上由boost :: shared_ptr类型代替,而不是Node*
。将Qt模型绑定到现有数据结构
现在,我想创建一个Qt模型来包装我的树数据结构。因此,我需要一种方法将任何模型索引与内部数据结构中的节点相关联。在这里,问题来了:
Qt支持这样做的方法有两种:
第一:
QModelIndex QAbstractItemModel::createIndex (int row, int column, void * ptr = 0) const
为给定的 行和列与内部 模型指数指针ptr。
其次:
QModelIndex QAbstractItemModel::createIndex (int row, int column, quint32 id) const
创建给定 的行和列与内部 标识符id一个模型索引。
好吧,在我的情况下应该如何关联节点?有没有可能将shared_ptr与模型索引关联...是的,我知道,我可以从我的shared_ptr接收一个原始指针并将其提供给CreateIndex()
,但它味道不好 - 对我来说似乎太不安全。
任何想法?
顺便说一下,我觉得一般来说Boost/Qt的整合似乎不是微不足道的,至少在内存管理方面。
10倍很多。
是的,我理解你。 GUID指针映射和内存池都可以用来解决这个特定的问题。但这两种解决方案似乎都有同样的问题 - 看起来更像是试图“破解”问题,而不是妥善解决问题。 如果上述提议是用QT模型做事的“正确”方式,那么我会说,这是QT模型/视图体系结构中真正的设计问题。 – Lev 2010-02-12 19:13:28
@Lev:这可能是一个设计问题,但不是我认为会很容易解决的问题......你会建议如何跟踪人们可能想要放入树中的任何类型的数据?此外,您可能想要了解Qt人们称之为“NG模型视图”课程,并查看它们是否对您有所帮助:http://qt.nokia.com/developer/learning/online/talks/developerdays2009/ tech-talks/the-next-generation-qt-item-views – 2010-02-13 15:28:21
@cjhuitt:链接中断 – Macke 2012-11-19 08:08:04