2011-08-19 72 views
1

我试图传递大量从一组文本框中提取的数据。数据格式为“+1.59”,“-2.52”和一些整数。此外,为了让事情更有趣,还有不同数量的文本框。Qt数据类型选择

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

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

回答

2

考虑到数据来自文本框,我会传递它作为文本,直到你解析和验证它。验证通过后,通常会将不同的值传递给某个构造函数,以将所有值分组到一个对象中。

+0

同意,在QString的数字是通过它自己的方法很容易和安全地也转换为数字primtives。 – cmannett85

0

您的数据似乎只是十进制数字。在这种情况下,彩车的载体很可能是最有效的:

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

如果它不只是漂浮,然后变种的载体就足够了(无需地图):

typedef std::vector<QVariant> VariantVector 
0

如果它全部来自文本框,那么您可以使用类似QStringList的东西,除非您真的需要它们作为QVariant,Qt自己建议使用列表中的速度和效率,列在文档QVector details中。

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];