¿Cómo convertir int a QString?


Respuestas:


657

Uso QString::number():

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

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

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

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.


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.


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


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


3

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.