2010-07-09 30 views

Respuesta

495

Uso QString::number():

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

Aquí está la pregunta más interesante: ¿hay una manera más rápida? Me he encontrado con un problema donde esta versión casi lleva más tiempo que todo el proceso después ... – Zeks

+0

Entonces probablemente quiera trabajar en búferes preasignados ... pero esto suena como una pregunta por separado. –

8

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

Por un poco avanzado, puede utilizar esto,

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

Obtener el documentación y un ejemplo here ..

+0

Desafortunadamente, el enlace al sitio de Nokia ya no funciona. –

96

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

// 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); 
+0

Como mencionas el operador '+', ten cuidado con los enteros, ya que podría funcionar pero internamente se llama a la implementación 'operator + (const QString & s, char c)', y la cadena no contendrá el entero como número pero su 'QChar :: fromAscii (c)' equivalent – x29a

+1

Como mencionas el operador +, puedes hacerlo, pero entendiendo qué está pasando: QString p = s + QString :: number (1); siendo s un QString funciona perfectamente. Entonces, básicamente QString + QString está bien, QString + int ** malo **. –

10

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 referencia de clase QString.

12

Sin embargo, otra opción es utilizar QTextStream y el operador << casi de la misma manera como lo haría con cout en C++:

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

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

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

Precaución: Usted puede verse tentado a utilizar el servicio de sprintf() para imitar el estilo C printf() declaraciones, pero se recomienda utilizar QTextStream o arg() porque soportan Unicode string s.

16

Además, para convertir lo que quieras, puedes usar QVariant. Para una int a un QString que se obtiene:

QVariant(3).toString(); 

Un float a un string o una string a un flotador:

QVariant(3.2).toString(); 
QVariant("5.2").toFloat(); 
+0

'QVariant' rulez! –

+0

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 conversiones livianas, y las otras respuestas para tratamientos especiales. – mr3

-1

simplemente para la corrección, puede utilizar la biblioteca estándar y hacer QString qstr = QString::fromStdString(std::to_string(42));