Comment convertir int en QString?


Réponses:


658

Utilisation QString::number():

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

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

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

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.


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.


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


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


3

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.