Qt:将数组与QTreeView项关联

时间:2016-10-11 17:12:15

标签: c++ qt model-view-controller treeview

我正在尝试以数组的形式将一些数据(例如从sqlite数据库接收的列)与我的QTreeView项相关联,以便我可以直接从该项中访问该数据。例如,我可以右键单击该项并选择一个操作,该操作将返回项目的数据以进行进一步操作,如处理,绘图等。所以基本上,我正在尝试使用表示值数组的QTreeView项。

QStandardItem :: setData()似乎对我没有帮助,因为它接受了QVariant。我可以尝试以某种方式将指向我的数据(数组)的指针链接到QTreeView项并尝试关联它们,但我不确定是否需要花费我的时间。我检查了Qt文档,看看我可以用视图和模型做些什么,但是我找不到任何有希望的东西。

我不是在使用某种QTableView应用程序。我试图通过单个QTreeView项表示整个数组。我很感激有关此问题的任何建议。

更新:我想声明我可以使用QVector之类的Qt容器,以防答案可能取决于容器类型。

1 个答案:

答案 0 :(得分:1)

你可以做两件事。 QVariant也可以是QVariantList,因此您实际上可以创建QVariant对象列表并使用QStandardItem :: setData存储它们。设置数据时,只需创建QVariantList并将其传递给setData。在检索时,您将获得一个QVariant,然后调用QVariant.toList()将其转换为可以迭代的列表。

此时,您有一个QVariant对象的QList,因此您必须将单个QVarient转换为您正在存储/检索的任何数据类型。

当我使用这种技术时,为了简单起见,我将QVariant / QVariantList处理包装在一个小类中。

您还可以将QVector直接存储到QVariant中。您必须使用“setValue”方法来存储QVector和“值”方法来检索它:

typedef QVector <int> IntVector;
IntVector some_data;
QVariant variant;
variant.setValue (some_data);

IntVector result = variant.value <IntVector> ();

typedef仅用于清理代码。当然,您可以直接使用QVector声明。