2010-07-09 15 views

Odpowiedz

495

Zastosowanie QString::number():

int i = 42; 
QString s = QString::number(i); 
+0

Oto bardziej interesujące pytanie: czy istnieje szybszy sposób? Napotkałem problem, w którym ta wersja prawie zajmuje więcej czasu niż całe przetwarzanie później ... – Zeks

+0

Wtedy prawdopodobnie chcesz pracować na wstępnie przydzielonych buforach ... ale brzmi to jak oddzielne pytanie. –

8

W swej najprostszej formie, użyj odpowiedź Georg Fritzsche

Dla nieco rozszerzone, można użyć tego

QString QString::arg (int a, int fieldWidth = 0, int base = 10, const QChar & fillChar = QLatin1Char(' ')) const 

Pobierz dokumentacja i przykład here ..

+0

Niestety, łącze do witryny Nokia nie działa. –

96

A jeśli chcesz umieścić go w łańcuchu znaków w kontekście tekstowym, zapomnij o operatorze +. Wystarczy zrobić:

// Qt 5 + C++11 
auto i = 13;  
auto printable = QStringLiteral("My magic number is %1. That's all!").arg(i); 

// Qt 5 
int i = 13;  
QString printable = QStringLiteral("My magic number is %1. That's all!").arg(i); 

// Qt 4 
int i = 13;  
QString printable = QString::fromLatin1("My magic number is %1. That's all!").arg(i); 
+0

Ponieważ wspomniałeś o operatorze '+ ', uważając na liczby całkowite, ponieważ może to bardzo dobrze działać, ale wewnętrznie, wywoływana jest implementacja' operator + (const QString & s, char c) ', a ciąg nie będzie zawierał liczby całkowitej jako liczby, ale jej 'QChar :: fromAscii (c)' Odpowiadając – x29a

+1

Od kiedy wymieniłeś operatora +, możesz to zrobić, ale zrozumienie co się dzieje: QString p = s + QString :: number (1); bycie s a QString działa idealnie. Tak więc, w zasadzie QString + QString jest w porządku, QString + int ** zły **. –

10

Zawsze używam QString::setNum().

int i = 10; 
double d = 10.75; 
QString str; 
str.setNum(i); 
str.setNum(d); 

setNum() jest przeciążony na wiele sposobów. Zobacz odniesienie do klasy: QString.

12

Jeszcze inną opcją jest użycie QTextStream a operator w podobny sposób << jak można wykorzystać cout w C++:

QPoint point(5,1); 
QString str; 
QTextStream(&str) << "Mouse click: (" << point.x() << ", " << point.y() << ")."; 

// OUTPUT: 
// Mouse click: (5, 1). 

Ponieważ operator <<() został przeciążony, można go używać do wielu typów, nie tylko int. QString::arg() jest przeciążony, na przykład arg(int a1, int a2), ale nie ma arg(int a1, QString a2), więc używanie i operatora << jest wygodne podczas formatowania dłuższych ciągów o mieszanych typach.

Uwaga: Można ulec pokusie, aby skorzystać z możliwości sprintf() naśladować klimatyzacji Styl printf() wypowiedzi, ale zaleca się stosowanie QTextStream lub arg() ponieważ obsługują Unicode string s.

16

Co więcej, aby przekonwertować, co chcesz, możesz użyć QVariant. dla int Do QString otrzymasz:

QVariant(3).toString(); 

float do string lub string do pływaka:

QVariant(3.2).toString(); 
QVariant("5.2").toFloat(); 
+0

'Reguła QVariant'! –

+0

Zadzwoń do mnie, ale bardziej wykorzystałem pytanie "Jak przekonwertować numer na QString?", Co jest główną odpowiedzią na małe konwersje i inne odpowiedzi na specjalne zabiegi. – mr3

-1

Tylko dla kompletności, można użyć standardowej biblioteki i zrobić QString qstr = QString::fromStdString(std::to_string(42));

Powiązane problemy