【问题标题】:Qt Data Type ChoiceQt 数据类型选择
【发布时间】:2011-10-30 15:47:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ arrays qt types


    【解决方案1】:

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

    【讨论】:

    • 同意,QString 中的数字也可以通过自己的方法轻松安全地转换为数字基元。
    【解决方案2】:

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

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

    如果它不只是浮动,那么一个变体向量就足够了(不需要地图):

    typedef std::vector<QVariant> VariantVector
    

    【讨论】:

      【解决方案3】:

      如果所有内容都来自文本框,您不妨使用 QStringList 之类的东西,除非您真的非常需要它们作为 QVariant,Qt 自己建议使用列表以提高速度和效率,文档中的 QVector details 中列出了这些列表。

      【讨论】:

        【解决方案4】:

        由于您的数据代表浮点数,我同意您可能应该使用包含浮点数而不是 QVariants 的数据结构。如果您希望能够按名称引用项目,您将需要使用 QMap 或 QHash。 QHash 更快,但是如果您遍历 QMap 值,它们会按键排序。您使用的数据类型 QVariantMap 只是 QMap&lt;QString, QVariant&gt;,其中 QString 是映射的键数据类型,QVariant 是映射的值数据类型。

        我会选择QHash&lt;QString,float&gt; floatMap。要转换文本框中的数据,您可以使用QString::toInt()

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

        要访问数据,请使用:

        float value = floatHash[textBoxName];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-01
          • 1970-01-01
          • 2011-05-16
          • 2016-05-31
          • 2021-02-25
          • 2017-04-04
          • 2015-01-07
          相关资源
          最近更新 更多