Qt:将数字转换为QString,QVariant或QString :: number更好

时间:2012-11-08 10:52:35

标签: c++ qt

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

代码如下:

#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()为QVariant提供了16个字节,为QString提供了4个字节。

2 个答案:

答案 0 :(得分:4)

当然第二种变体更好。

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

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

答案 1 :(得分:1)

为什么不简单

qDebug << number

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

qDebug << static_cast<int>(number);

或(这个有点难以理解,查找整体促销)

qDebug << +number;

我认为,与您的任何一项建议相比,此选项会更好(性能方面)。