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.

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.


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


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

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.


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

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--;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.