Wie konvertiere ich int in QString?


Antworten:


656

Verwendung QString::number():

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

2
Hier ist die interessantere Frage: Gibt es einen schnelleren Weg? Ich bin auf ein Problem gestoßen, bei dem diese Version fast mehr Zeit in
Anspruch

Dann möchten Sie wahrscheinlich an vorab zugewiesenen Puffern arbeiten ... aber das klingt nach einer separaten Frage.
Georg Fritzsche

122

Und wenn Sie es in einem Textkontext in eine Zeichenfolge einfügen möchten, vergessen Sie den +Operator. Einfach machen:

// 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);

2
Da Sie den +Operator erwähnen, der bei Ganzzahlen vorsichtig ist, da er möglicherweise sehr gut funktioniert, aber intern, wird die operator+(const QString &s, char c)Implementierung aufgerufen, und die Zeichenfolge enthält die Ganzzahl nicht als Zahl, sondern als QChar::fromAscii(c)Äquivalent
x29a

3
Da Sie den Operator + erwähnen, können Sie dies tatsächlich tun, aber verstehen, was passiert: QString p = s + QString :: number (1); sa QString zu sein funktioniert perfekt. Grundsätzlich ist QString + QString in Ordnung, QString + int schlecht .
David Sánchez

28

Darüber hinaus können Sie verwenden, um zu konvertieren, was Sie wollen QVariant. Für ein intbis ein QStringbekommen Sie:

QVariant(3).toString();

A floatzu a stringoder a stringzu a float:

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

1
QVariantrulez!
Mr.Coffee

Nennen Sie mich verrückt, aber ich würde die Frage "Wie konvertiere ich eine Zahl in QString?", Die Hauptantwort für leichte Konvertierungen und die anderen Antworten für spezielle Behandlungen besser nutzen.
mr3

17

Eine weitere Option besteht darin, QTextStream und den <<Operator auf die gleiche Weise zu verwenden, wie Sie es coutin C ++ tun würden :

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

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

Da der Operator <<()überladen wurde, können Sie ihn nicht nur für mehrere Typen verwenden int. QString::arg()ist zum Beispiel überladen, arg(int a1, int a2)aber es gibt keine arg(int a1, QString a2), daher ist die Verwendung von QTextStream()und Operator <<praktisch, wenn längere Zeichenfolgen mit gemischten Typen formatiert werden.

Achtung: Sie könnten versucht sein, die Funktion zu verwenden sprintf(), um printf()Anweisungen im C-Stil nachzuahmen. Es wird jedoch empfohlen, diese zu verwenden QTextStreamoder arg()weil sie Unicodes unterstützen string.


14

Ich benutze immer QString::setNum().

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

setNum()ist in vielerlei Hinsicht überlastet. Siehe QStringKlassenreferenz.


12

Verwenden Sie in der einfachsten Form die Antwort von Georg Fritzsche

Für ein bisschen Fortgeschrittene können Sie dies verwenden,

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

Holen Sie die Dokumentation und ein Beispiel hier ..


Leider funktioniert der Link zur Nokia-Website nicht mehr.
Eliyahu Skoczylas

3

Der Vollständigkeit halber können Sie die Standardbibliothek verwenden und tun QString qstr = QString::fromStdString(std::to_string(42));


3

Wenn Sie eine länderspezifische Formatierung benötigen, verwenden Sie stattdessen QLocale :: toString.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.