Konvertieren Sie ein int in einen QString mit Null-Auffüllung (führende Nullen).

91

Ich möchte eine Zahl "stringifizieren" und eine Null-Auffüllung hinzufügen, so wie ich printf("%05d")führende Nullen hinzufügen würde, wenn die Zahl weniger als 5 Stellen hat.

elcuco
quelle

Antworten:

176

Benutze das:

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

5 hier entspricht 5 in printf("%05d"). 10 ist der Radix, Sie können 16 setzen, um die Zahl in hex zu drucken.

Chalup
quelle
8
Vielen Dank. Dokumentation hier .
Migas
2
Sehr nützlich für das Erstellen von Hex-Farbcodes aus Ganzzahlen, danke :)
Michal
Und warum ist das String-Argument "%1"?
Dhein
@Zaibis Weil es das erste Argument ist. Wenn es mehr gäbe, wären sie %2usw. Siehe doc.qt.io/qt-5/qstring.html#arg
Paul Masri-Stone
@sashoalm wie können wir die gleiche Anzahl von führenden Nullen entfernen? Ex. Mein Hex war 1f mit QString ("% 1"). Arg (yourNumber, 5, 10, QChar ('0')); es wurde 001f. Wie mache ich nun das Gegenteil, um wieder 1f zu erhalten? Vielen Dank für die Hilfe im Voraus.
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');

Ergebnis ist jetzt 00099

Дмитрий Гранин
quelle
Vielen Dank, ich erstelle einen String im laufenden Betrieb mit + =, sodass die ausgewählte Lösung nicht verwendet werden konnte.
Rudy Barbieri
Besser, aber es wird immer noch eine temporäre Zeichenfolge erstellt: /
Trass3r
16

Das kurze Beispiel:

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
quelle
3

Versuchen:

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

BEARBEITEN: Gemäß den Dokumenten unter http://qt-project.org/doc/qt-4.8/qstring.html#sprintf :

Warnung : Wir empfehlen, QString :: sprintf () nicht in neuem Qt-Code zu verwenden. Verwenden Sie stattdessen QTextStream oder arg (), die beide Unicode-Zeichenfolgen nahtlos unterstützen und typsicher sind. Hier ist ein Beispiel, das QTextStream verwendet:

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

In den anderen Dokumenten finden Sie Informationen zu Funktionen, die bei dieser Methode fehlen.

Isaac
quelle
nett, nicht als beste Lösung markieren, da die aktuell markierte Antwort flexibler ist. Aber schön zu wissen! (Upvoting)
Elcuco
-1

Ich benutze eine Technik seit VB 5

QString theStr=QString("0000%1").arg(theNumber).right(4);
Ramao Balta
quelle
Viel memcpy () und ein Protokoll über verschwendeten Speicher / CPU. Wenn Sie Qt / C ++ verwenden, möchten Sie Leistung (das heißt, ich habe diesen Trick in JS gesehen, und es ist ein guter Hack auf dieser Plattform).
Elcuco
3
Gib nicht auf !!
Lennart Rolland
-2

Ich habe es versucht (was funktioniert, aber umständlich).

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