qt - 将 Qt 模型绑定(bind)到现有数据结构

标签 qt oop model-view-controller model

我有一个树状的多态数据结构,其中节点是 Node 类(由我实现)或其任何子类的实例。我的应用程序大量使用 Boost,节点实际上由 boost::shared_ptr 类型表示,而不是 Node*

现在,我想创建一个 Qt 模型来包装我的树数据结构。因此,我需要一种方法将任何模型索引与内部数据结构中的节点相关联。问题来了:

Qt 支持两种方法:

第一:

QModelIndex QAbstractItemModel::createIndex (int row, int column, void * ptr = 0) const

Creates a model index for the given row and column with the internal pointer ptr.

第二个:

QModelIndex QAbstractItemModel::createIndex (int row, int columns, quint32 id) const

Creates a model index for the given row and column with the internal identifier, id.

好的,我应该如何准确地关联我的案例中的节点?不可能将shared_ptr与模型索引关联起来...是的,我知道,我可以从shared_ptr接收原始指针并将其提供给CreateIndex(),但它闻起来很糟糕 - 似乎对我来说太不安全了。

有什么想法吗?

顺便说一句,我觉得总的来说,Boost/Qt 集成至少在内存管理领域似乎并不是微不足道的。

10 倍很多。

最佳答案

如果您想在不传递原始指针的情况下进行简单关联,请将共享内存放入容器中,并将该容器元素的 ID 值传递到模型索引中。例如,您可以创建声明

QMap< quint32, boost::shared_ptr< Foo > > index_map;

并使用它。也许您必须小心,不要重复现有指针的 ID。对我来说似乎有点过于复杂......

您也可以只保留一个指针列表(以确保在需要时持续可用),然后在 QModelIndex 中使用指针的实际地址。这可能就是我会做的。

关于qt - 将 Qt 模型绑定(bind)到现有数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2248102/

相关文章:

c++ - 为什么python 3.2的Python.h必须和Qt4一起先包含进来

c++ - QSyntaxHighlighter 不适用于创建的表单 QTextEdit

c++ - 有效地测试 QSet 是否包含元素,如果不存在则插入

java - 类设计——避免冗余代码

python - 在 Django 应用程序中使用 Python 对象

javascript - 格式化字符串到js数组

asp.net-mvc - 如何使用 Entity Framework 在 C# 中建模消息/聊天系统

qt - 在 QNetworkAccessManager 中,何时从解析 DNS 的 IP 列表中选择 IP?

java - 从列中获取数据,然后选择数据所属的整行

c# - 在 IIS 下的 ASP.net 网站中使用 C# 从 Windows 通用凭据存储中检索凭据