【问题标题】:Qt: Which is better for transforming a number to QString, QVariant or QString::numberQt:哪个更适合将数字转换为 QString、QVariant 或 QString::number
【发布时间】:2012-11-08 10:52:35
【问题描述】:

我只是好奇。比如说我需要在控制台中输出一个数字。

代码是:

#include <QDebug>
#include <QVariant>
#include <QString>

void displayNumber(quint8 number) {
    qDebug() << QVariant(number).toString();
    qDebug() << QString::number(number);
//or for example 
//  QLabel label; 
//  label.setText(QString::number(number));
//or 
//  label.setText(QVariant(number).toString());
}

哪个性能更好?我认为内存消耗也不同。 QVariant(number).toString() 意味着它将 QVariant 存储在堆栈中。不确定QString::number(),它不应该只调用函数吗(当然,函数有一个QString返回,所以它也被分配在堆栈上并占用该空间和操作来分配和取消分配它)? 不管怎样,sizeof() 给了我 16 个字节的 QVariant 和 4 个字节的 QString。

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    当然第二个变种更好。

    QString::number() 是一个返回所需字符串的静态函数。当您使用QVariant(number).toString(); 时,您首先创建了一个QVariant,然后将其转换为所需的字符串,因此您创建了一个额外且不必要的QVariant 类型的变量。

    此外,您无需将数字转换为字符串即可使用qDebug 输出它。 qDebug() &lt;&lt; 42; 工作正常。

    【讨论】:

    • 我也是这么想的。它分配 QVariant 并且在调用 .toString() 之后它还分配一个 QString 并返回 QString。
    【解决方案2】:

    为什么不简单

    qDebug << number
    

    ?如果在 quint8 的情况下它输出字符而不是数字本身,那么只需转换 -

    qDebug << static_cast<int>(number);
    

    或者(这个有点难理解,查积分促销)

    qDebug << +number;
    

    我敢打赌,与您的任何建议相比,此选项会更好(在性能方面)。

    【讨论】:

    • qDebug() 只是一个例子。假设 QLabel 标签; label.setText(QString::number(number));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 2014-06-14
    相关资源
    最近更新 更多