Comment convertir int en QString?

Réponses:

658

Utilisation QString::number():

int i = 42;
QString s = QString::number(i);
Georg Fritzsche
la source
2
Voici la question la plus intéressante: existe-t-il un moyen plus rapide? J'ai rencontré un problème où cette version prend presque plus de temps que l'ensemble du traitement par la suite ...
Zeks
Ensuite, vous voudrez probablement travailler sur des tampons pré-alloués ... mais cela ressemble à une question distincte.
Georg Fritzsche
122

Et si vous voulez le mettre en chaîne dans un contexte de texte, oubliez l' +opérateur. Faites simplement:

// 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
la source
2
Puisque vous mentionnez l' +opérateur, faites attention aux entiers, car cela pourrait très bien fonctionner mais en interne, l' operator+(const QString &s, char c)implémentation est appelée, et la chaîne ne contiendra pas l'entier sous forme de nombre mais son QChar::fromAscii(c)équivalent
x29a
3
Puisque vous mentionnez l'opérateur +, vous pouvez réellement le faire, mais comprendre ce qui se passe: QString p = s + QString :: number (1); être sa QString fonctionne parfaitement. Donc, fondamentalement QString + QString est correct, QString + int mauvais .
David Sánchez
28

De plus, pour convertir ce que vous voulez, vous pouvez l'utiliser QVariant. Pour un intà un, QStringvous obtenez:

QVariant(3).toString();

A floatvers a stringou a stringvers a float:

QVariant(3.2).toString();
QVariant("5.2").toFloat();
Gabriel de Grimouard
la source
1
QVariantrulez!
Mr.Coffee
Appelez-moi fou, mais j'utiliserais plus la question comme "Comment convertir un nombre en QString?", Ceci comme la réponse principale pour les conversions légères et les autres réponses pour les traitements spéciaux.
mr3
17

Encore une autre option consiste à utiliser QTextStream et l' <<opérateur de la même manière que vous utiliseriez couten C ++:

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

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

L'opérateur <<()étant surchargé, vous pouvez l'utiliser pour plusieurs types, pas seulement int. QString::arg()est surchargé, par exemple arg(int a1, int a2), mais il n'y en a pas arg(int a1, QString a2), donc l' QTextStream()opérateur et l'opérateur <<sont pratiques lors du formatage de chaînes plus longues avec des types mixtes.

Attention: Vous pourriez être tenté d'utiliser la fonction sprintf()pour imiter des printf()instructions de style C , mais il est recommandé d'utiliser QTextStreamou arg()parce qu'elles prennent en charge les Unicode string.

Matthew Kraus
la source
14

J'utilise toujours QString::setNum().

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

setNum()est surchargé de plusieurs façons. Voir QStringréférence de classe.

Narek
la source
12

Dans sa forme la plus simple, utilisez la réponse de Georg Fritzsche

Pour un peu avancé, vous pouvez l'utiliser,

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

Obtenez la documentation et un exemple ici ..

liaK
la source
Malheureusement, le lien vers le site Nokia ne fonctionne plus.
Eliyahu Skoczylas
3

Pour être complet, vous pouvez utiliser la bibliothèque standard et faire QString qstr = QString::fromStdString(std::to_string(42));

Morgan
la source
3

Si vous avez besoin d'une mise en forme de nombre adaptée aux paramètres régionaux, utilisez plutôt QLocale :: toString.

André
la source