Qt数据类型选择

时间:2011-08-19 13:52:26

标签: c++ arrays qt types

我正在尝试传递从一组文本框中提取的大量数据。数据的格式为“+1.59”,“ - 2.52”和一些整数。此外,为了使事情更有趣,有不同数量的文本框SETS。

我正在研究使用QVariantMap,但是在证明难以提取数据并将其放入QByteArray之后。我也考虑过使用QByteArray,但一遍又一遍地解析它似乎不合适。我更喜欢我可以引用项目名称的数据类型 - 即data [“preX1”]。

最好的方法是什么?如果可能,请提供类型用法的基本示例。

4 个答案:

答案 0 :(得分:2)

考虑到数据来自 text 框,我会将其作为文本传递,直到您解析并验证它为止。一旦经过验证,您通常会使用不同的值传递给某个构造函数,以便将一个对象中的所有值分组。

答案 1 :(得分:0)

您的数据似乎只是十进制数字。在这种情况下,浮点数向量可能是最有效的:

typedef std::vector<float> FloatVector
FloatVector yourData;

如果它不仅仅是浮点数,那么变量矢量就足够了(不需要地图):

typedef std::vector<QVariant> VariantVector

答案 2 :(得分:0)

如果全部来自文本框你也可以使用像QStringList这样的东西,除非你真的需要它们作为QVariant,Qt自己建议使用列表来提高速度和效率,列于QVector details中。文档。

答案 3 :(得分:0)

由于您的数据代表浮点数,我同意您应该使用包含浮点数而不是QVariants的数据结构。如果您希望能够按名称引用项目,那么您将需要使用QMap或QHash。 QHash更快,但如果迭代它们,QMap值将按键排序。您使用的数据类型QVariantMap只是QMap<QString, QVariant>,其中QString是地图的关键数据类型,QVariant是地图的值数据类型。

我会选择QHash<QString,float> floatMap。要从文本框转换数据,您只需使用QString::toInt()

QHash<QString,float> floatHash;
QString textBoxString;
QString textBoxName;
floatHash[textBoxName] = textBoxString.toInt();

要访问数据,请使用:

float value = floatHash[textBoxName];