2012-11-08 20 views
6

numara dönüştürmek için iyidir Ben sadece merak ediyorum. Örneğin, konsola bir sayı vermem gerektiğini varsayalım.Qt: QString, QVariant veya QString :: numara

kodu olacaktır: daha iyi performans akıllıca olacaktır

#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()); 
} 

? Bence hafıza tüketimi de farklı. QVariant (number) .toString(), yığındaki bir QVariant'ı sakladığı anlamına gelir. QString :: number() ile ilgili emin değilim, sadece işlevi çağırmamalı (emin olun, fonksiyonun bir QString dönüşü vardır, böylece yığına da tahsis edilir ve o alanı alır ve bu işlemleri ayırır ve ayrılır). Neyse, sizeof() QVariant için 16 Byte ve QString için 4 Byte verir.

cevap

4

Elbette, ikinci varyant daha iyidir.

QString::number() istenen dize döndürür statik fonksiyonudur. QVariant(number).toString();'u kullandığınızda, önce bir QVariant oluşturuyorsunuz ve onu istediğiniz dizeye dönüştürmekten daha fazla, QVariant türünde fazladan ve gereksiz bir değişken yapıyorsunuz.

Ayrıca, qDebug ile çıktı o bir dizeye numarası dönüştürülemedi gerekmez. qDebug() << 42; iyi çalışıyor.

+0

Ayrıca düşündüğüm de bu. QVariant'ı ayırır ve .toString() öğesini çağırdıktan sonra bir QString de ayırır ve QString'i döndürür. –

+0

@Moraru, evet, tam olarak;) – SingerOfTheFall

1

Neden sadece

qDebug << number 

?

qDebug << static_cast<int>(number); 

veya

qDebug << +number; 

I (bu bir integral promosyonlar anlamak bakmak için biraz zor) - Bir quint8 durumunda yerine sayı kendisinin karakterini verir, o zaman sadece dökme Bu seçeneğin önerilerinden herhangi birine kıyasla daha iyi (performans açısından) olacağını iddia ediyorum.

+0

qDebug() örnek olarak verilmiştir. QLabel etiketi diyelim; label.setText (QString :: sayısı (adet)); –