在执行期间声明一个结构?

时间:2015-11-30 10:36:41

标签: qt data-structures struct runtime

假设我正在从文件中读取表,但原则上没有定义列集(它们在文件的第一行中定义)。我正在考虑从文件中读取对象列表。第一行包含标题,在以下行中每行都有对象值。每个对象可能是一个结构,但在这种情况下,我将不得不在执行时间中定义结构字段(列名)。

如何处理此问题?

我正在使用Qt。我们欢迎聪明的方法(如上所述)。

例如,表名:

FirstName LastName
sdasdc    bdfgdg
drtggw    nhnfgh
wrew      rtyhrt

1 个答案:

答案 0 :(得分:1)

您可以将数据放入QMap<QString, QVariant>QVariant行为,就像最常见的Qt数据类型的联合一样)。因此,您可以轻松命名结构的每个字段,并按名称(而非索引)访问数据。

您也可以使用QList<QVariant>。这听起来有点简单,但在这种情况下,您将使用索引从此“结构”获取值(因此代码将不那么清楚),因此我建议您使用QMap

<强>更新

因此,QMap<QString, QVariant>QList<QVariant>是列表中的项目。由于您需要列出此类商品,因此您将使用QList<QMap<QString, QVariant>>QList<QList<QVariant>>

让我们比较一下这些选项:

如果您的列表非常小(例如在您的示例中 - 只有三个项目),则可以使用QList<QMap<QString, QVariant>>。在这种情况下,每列的每个标题将有三个副本。但是很容易获得有关任何项目的任何信息。

如果您需要处理非常大的列表,使用QList<QList<QVariant>>会更有效。在这种情况下,您将列的标题放在列表的第一个元素中,将带有数据的行放入此列表的下一个项目中。它更有效(你花费更少的内存),但处理起来有点复杂。