Ubah int menjadi QString dengan bantalan nol (nol di depan)

94

Saya ingin "merangkai" nomor dan menambahkan bantalan-nol, seperti bagaimana printf("%05d")menambahkan nol di depan jika nomor tersebut kurang dari 5 digit.

elcuco
sumber

Jawaban:

178

Gunakan ini:

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

5 di sini sesuai dengan 5 in printf("%05d"). 10 adalah radix, Anda dapat menempatkan 16 untuk mencetak nomor dalam hex.

chalup
sumber
8
Terima kasih. Dokumentasi di sini .
migas
2
Sangat berguna untuk membuat kode warna hex dari integer, terima kasih :)
Michal
Dan mengapa argumen stringnya "%1"?
dhein
@Zaibis Karena itu argumen pertama. Jika ada lebih banyak, mereka akan menjadi %2dll. Lihat doc.qt.io/qt-5/qstring.html#arg
Paul Masri-Stone
@sashoalm bagaimana kita bisa menghapus angka yang sama dari nol di depan? ex. Hex saya adalah 1f dengan QString ("% 1"). Arg (yourNumber, 5, 10, QChar ('0')); menjadi 001f. sekarang bagaimana melakukan kebalikannya untuk mendapatkan 1f lagi? terima kasih atas bantuannya sebelumnya.
Jimit Rupani
37

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

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

hasilnya sekarang 00099

Дмитрий Гранин
sumber
terima kasih, saya membuat string dengan cepat menggunakan + = sehingga solusi yang dipilih tidak dapat digunakan.
Rudy Barbieri
Lebih baik tetapi masih membuat string sementara: /
Trass3r
19

Contoh Singkat:

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
pengguna1767754
sumber
3

Mencoba:

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

EDIT: Menurut dokumen di http://qt-project.org/doc/qt-4.8/qstring.html#sprintf :

Peringatan : Kami tidak merekomendasikan penggunaan QString :: sprintf () dalam kode Qt baru. Sebagai gantinya, pertimbangkan untuk menggunakan QTextStream atau arg (), yang keduanya mendukung string Unicode dengan mulus dan aman untuk tipe. Berikut adalah contoh yang menggunakan QTextStream:

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

Baca dokumen lain untuk fitur yang hilang dari metode ini.

Isaac
sumber
bagus, bukan menandai sebagai perbaikan terbaik, karena jawaban yang ditandai saat ini lebih fleksibel. Tapi senang mengetahuinya! (upvoting)
elcuco
-1

Saya menggunakan teknik sejak VB 5

QString theStr=QString("0000%1").arg(theNumber).right(4);
Ramao Balta
sumber
Banyak memcpy () dan log memori / cpu yang terbuang. Jika Anda menggunakan Qt / C ++ Anda menginginkan kinerja (yang mengatakan, saya melihat trik ini digunakan di JS, dan ini adalah peretasan yang bagus pada platform itu).
elcuco
3
Jangan menyerah !!
Lennart Rolland
-2

Saya mencoba ini (yang berhasil, tetapi tidak praktis).

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