2012-11-08 82 views
6

我只是好奇。比方說,我需要在控制檯中輸出一個數字。Qt:將數字轉換爲QString,QVariant或QString更好:編號

的代碼將是:

#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。

回答

4

當然,第二個變種更好。

QString::number()是一個靜態函數,它返回所需的字符串。當你使用QVariant(number).toString();時,你首先創建了一個QVariant,然後將它轉換爲所需的字符串,因此您可以創建一個額外且不必要的變量QVariant類型。

此外,您不需要將數字轉換爲字符串以便用qDebug輸出。 qDebug() << 42;工作正常。

+0

這也是我的想法。它分配QVariant並在調用.toString()之後分配一個QString並返回QString。 –

+0

@Moraru,是的,正好;) – SingerOfTheFall

1

爲什麼不乾脆

qDebug << number 

?如果在quint8的情況下,它輸出的字符,而不是數字本身,那麼就投 -

qDebug << static_cast<int>(number); 

或(這個有點棘手的理解,查找積分促銷)

qDebug << +number; 

我我敢打賭,與任何一條建議相比,這個選項會更好(表現明智)。

+0

qDebug()就是一個例子。假設QLabel標籤; label.setText(QString的::號(數字)); –