我试图传递大量从一组文本框中提取的数据。数据格式为“+1.59”,“-2.52”和一些整数。此外,为了让事情更有趣,还有不同数量的文本框。Qt数据类型选择
我正在研究使用QVariantMap,但提取数据并将其放入QByteArray后证明是困难的。我也考虑过使用QByteArray,但一遍又一遍地分析它似乎并不合适。我更喜欢可以引用项目名称的数据类型,即data [“preX1”]。
什么是最好的方法?请尽可能提供类型使用的基本示例。
我试图传递大量从一组文本框中提取的数据。数据格式为“+1.59”,“-2.52”和一些整数。此外,为了让事情更有趣,还有不同数量的文本框。Qt数据类型选择
我正在研究使用QVariantMap,但提取数据并将其放入QByteArray后证明是困难的。我也考虑过使用QByteArray,但一遍又一遍地分析它似乎并不合适。我更喜欢可以引用项目名称的数据类型,即data [“preX1”]。
什么是最好的方法?请尽可能提供类型使用的基本示例。
考虑到数据来自文本框,我会传递它作为文本,直到你解析和验证它。验证通过后,通常会将不同的值传递给某个构造函数,以将所有值分组到一个对象中。
您的数据似乎只是十进制数字。在这种情况下,彩车的载体很可能是最有效的:
typedef std::vector<float> FloatVector
FloatVector yourData;
如果它不只是漂浮,然后变种的载体就足够了(无需地图):
typedef std::vector<QVariant> VariantVector
如果它全部来自文本框,那么您可以使用类似QStringList的东西,除非您真的需要它们作为QVariant,Qt自己建议使用列表中的速度和效率,列在文档QVector details中。
由于您的数据表示浮动,我同意你应该使用浮动数据结构而不是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];
同意,在QString的数字是通过它自己的方法很容易和安全地也转换为数字primtives。 – cmannett85