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.

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.


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


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

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.


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);

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--;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.