¿Cómo convertir int a QString?

Respuestas:

657

Uso QString::number():

int i = 42;
QString s = QString::number(i);
Georg Fritzsche
fuente
2
Aquí está la pregunta más interesante: ¿hay una manera más rápida? Me he encontrado con un problema en el que esta versión casi lleva más tiempo que todo el procesamiento posterior ...
Zeks
Entonces, probablemente desee trabajar en buffers preasignados ... pero esto suena como una pregunta separada.
Georg Fritzsche
122

Y si desea ponerlo en cadena dentro de algún contexto de texto, olvídese del +operador. Simplemente haz:

// 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
fuente
2
Como menciona al +operador, tenga cuidado con los enteros, ya que podría funcionar bien pero internamente, operator+(const QString &s, char c)se llama a la implementación y la cadena no contendrá el entero como número, sino su QChar::fromAscii(c)equivalente
x29a
3
Como menciona el operador +, puede hacerlo, pero entendiendo lo que está sucediendo: QString p = s + QString :: number (1); ser un QString funciona perfectamente. Entonces, básicamente QString + QString está bien, QString + int mal .
David Sánchez
28

Además para convertir lo que quieras, puedes usarlo QVariant. Para un inta a QStringobtienes:

QVariant(3).toString();

A floata a stringo stringa a float:

QVariant(3.2).toString();
QVariant("5.2").toFloat();
Gabriel de Grimouard
fuente
1
QVariantrulez!
Mr.Coffee
Llámame loco, pero obtendría más uso de la pregunta como "¿Cómo convertir un número a QString?", Esta es la respuesta principal para las conversiones livianas y las otras respuestas para tratamientos especiales.
mr3
17

Otra opción es usar QTextStream y el <<operador de la misma manera que lo haría couten C ++:

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

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

Debido a que el operador <<()se ha sobrecargado, puede usarlo para varios tipos, no solo int. QString::arg()está sobrecargado, por ejemplo arg(int a1, int a2), pero no lo hay arg(int a1, QString a2), por lo que usar QTextStream()y operator <<es conveniente al formatear cadenas más largas con tipos mixtos.

Precaución: es posible que sienta la tentación de utilizar la función sprintf()para imitar las printf()declaraciones de estilo C , pero se recomienda usarlas QTextStreamo arg()porque son compatibles con Unicode string.

Matthew Kraus
fuente
14

Yo siempre uso QString::setNum().

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

setNum()está sobrecargado de muchas maneras. Ver QStringreferencia de clase.

Narek
fuente
12

En su forma más simple, use la respuesta de Georg Fritzsche

Para un poco avanzado, puedes usar esto,

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

Obtenga la documentación y un ejemplo aquí .

liaK
fuente
Desafortunadamente, el enlace al sitio de Nokia ya no funciona.
Eliyahu Skoczylas
3

Solo para completar, puede usar la biblioteca estándar y hacer QString qstr = QString::fromStdString(std::to_string(42));

Morgan
fuente
3

Si necesita un formato de número compatible con la configuración regional, use QLocale :: toString en su lugar.

André
fuente