Wie konvertiere ich int in QString?

Antworten:

656

Verwendung QString::number():

int i = 42;
QString s = QString::number(i);
Georg Fritzsche
quelle
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);
Kamil Klimek
quelle
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();
Gabriel de Grimouard
quelle
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.

Matthew Kraus
quelle
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.

Narek
quelle
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 ..

liaK
quelle
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));

Morgan
quelle
3

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

André
quelle