Convertir un int en QString avec un remplissage nul (zéros non significatifs)

91

Je veux "stringifier" un nombre et ajouter un remplissage à zéro, comme comment printf("%05d")ajouterait des zéros non significatifs si le nombre est inférieur à 5 chiffres.

elcuco
la source

Réponses:

176

Utilisez ceci:

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

5 correspond ici à 5 pouces printf("%05d"). 10 est la base, vous pouvez mettre 16 pour imprimer le nombre en hexadécimal.

chalup
la source
8
Merci. Documentation ici .
migas
2
Très utile pour créer des codes de couleur hexadécimaux à partir d'un entier, merci :)
Michal
Et pourquoi l'argument chaîne est "%1"?
dhein
@Zaibis Parce que c'est le premier argument. S'il y en avait plus, ils le seraient %2etc. Voir doc.qt.io/qt-5/qstring.html#arg
Paul Masri-Stone
@sashoalm comment pouvons-nous supprimer le même nombre de zéro non significatif? ex. Mon hex était 1f avec QString ("% 1"). Arg (yourNumber, 5, 10, QChar ('0')); il est devenu 001f. maintenant, comment faire l'inverse pour obtenir à nouveau 1f? merci pour l'aide à l'avance.
Jimit Rupani
36

QString QString :: rightJustified (int width, QChar fill = QLatin1Char (''), bool truncate = false) const

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

le résultat est maintenant 00099

Дмитрий Гранин
la source
merci, je crée une chaîne à la volée en utilisant + = donc la solution sélectionnée ne peut pas être utilisée.
Rudy Barbieri
Mieux mais crée toujours une chaîne temporaire: /
Trass3r
16

L'exemple court:

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
user1767754
la source
3

Essayer:

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

EDIT: Selon la documentation sur http://qt-project.org/doc/qt-4.8/qstring.html#sprintf :

Attention : nous ne recommandons pas d'utiliser QString :: sprintf () dans le nouveau code Qt. Au lieu de cela, envisagez d'utiliser QTextStream ou arg (), qui prennent tous deux en charge les chaînes Unicode de manière transparente et sont de type sécurisé. Voici un exemple qui utilise QTextStream:

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

Lisez les autres documents pour les fonctionnalités absentes de cette méthode.

Isaac
la source
sympa, ne marque pas comme la meilleure solution, car la réponse actuellement marquée est plus flexible. Mais bon à savoir! (vote positif)
elcuco
-1

J'utilise une technique depuis VB 5

QString theStr=QString("0000%1").arg(theNumber).right(4);
Ramao Balta
la source
Beaucoup de memcpy () et un journal de mémoire gaspillée / cpu. Si vous utilisez Qt / C ++, vous voulez des performances (cela dit, j'ai vu cette astuce en utilisant JS, et c'est un bon hack sur cette plate-forme).
elcuco
3
N'abandonnez pas !!
Lennart Rolland
-2

J'essayais cela (qui fonctionne, mais encombrant).

QString s;
s.setNum(n,base);
s = s.toUpper();
presision -= s.length();
while(presision>0){
    s.prepend('0');
    presision--;
}
elcuco
la source