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.

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.


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


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

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.


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

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--;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.