我有一個樹狀多態數據結構,其中節點是類節點(由我實現)或其任何子類的實例。我的應用程序大量使用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