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