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.

elcuco
fuente

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.

chalup
fuente
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

Дмитрий Гранин
fuente
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
usuario1767754
fuente
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.

Isaac
fuente
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);
Ramao Balta
fuente
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--;
}
elcuco
fuente