Convierta un int en un QString con relleno de ceros (ceros iniciales)


94

Quiero "secuenciar" un número y agregar un relleno de printf("%05d")ceros, como si el número fuera de menos de 5 dígitos agregaría ceros a la izquierda.

Respuestas:


178

Utilizar esta:

QString number = QStringLiteral("%1").arg(yourNumber, 5, 10, QLatin1Char('0'));

5 aquí corresponde a 5 pulg printf("%05d"). 10 es la base, puede poner 16 para imprimir el número en hexadecimal.


8
Gracias. Documentación aquí .
migas

2
Muy útil para crear códigos de colores hexadecimales a partir de números enteros, gracias :)
Michal

¿Y por qué es el argumento de cadena "%1"?
dhein

@Zaibis Porque es el primer argumento. Si hubiera más, serían, %2etc. Ver doc.qt.io/qt-5/qstring.html#arg
Paul Masri-Stone

@sashoalm ¿cómo podemos eliminar el mismo número de cero a la izquierda? ex. Mi hexadecimal era 1f con QString ("% 1"). Arg (yourNumber, 5, 10, QChar ('0')); se convirtió en 001f. ahora, ¿cómo hacer lo contrario para volver a obtener 1f? gracias por la ayuda de antemano.
Jimit Rupani

37

QString QString :: rightJustified (ancho int, relleno QChar = QLatin1Char (''), bool truncate = false) const

int myNumber = 99;
QString result;
result = QString::number(myNumber).rightJustified(5, '0');

el resultado ahora es 00099


gracias, estoy creando una cadena sobre la marcha usando + = para que la solución seleccionada no se pueda usar.
Rudy Barbieri

Mejor pero aún crea una cadena temporal: /
Trass3r

19

El breve ejemplo:

int myNumber = 9;

//Arg1: the number
//Arg2: how many 0 you want?
//Arg3: The base (10 - decimal, 16 hexadecimal - if you don't understand, choose 10)
//      It seems like only decimal can support negative numbers.
QString number = QString("%1").arg(myNumber, 2, 10, QChar('0')); 

Output will be: 09

3

Tratar:

QString s = s.sprintf("%08X",yournumber);

EDITAR: De acuerdo con los documentos en http://qt-project.org/doc/qt-4.8/qstring.html#sprintf :

Advertencia : No recomendamos usar QString :: sprintf () en el nuevo código Qt. En su lugar, considere usar QTextStream o arg (), los cuales admiten cadenas Unicode sin problemas y son seguros para los tipos. Aquí hay un ejemplo que usa QTextStream:

QString result;
QTextStream(&result) << "pi = " << 3.14;
// result == "pi = 3.14"

Lea los otros documentos para conocer las funciones que faltan en este método.


agradable, no marcando como la mejor solución, ya que la respuesta actualmente marcada es más flexible. ¡Pero bueno saberlo! (votación a favor)
elcuco

-1

Utilizo una técnica desde VB 5

QString theStr=QString("0000%1").arg(theNumber).right(4);

Mucho memcpy () y un registro de memoria / cpu desperdiciada. Si está utilizando Qt / C ++, quiere rendimiento (dicho esto, vi este truco en JS, y es un buen truco en esa plataforma).
elcuco

3
¡¡No te rindas !!
Lennart Rolland

-2

Estaba probando esto (que funciona, pero es engorroso).

QString s;
s.setNum(n,base);
s = s.toUpper();
presision -= s.length();
while(presision>0){
    s.prepend('0');
    presision--;
}
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.