Bagaimana cara mengubah int ke QString?


Jawaban:


656

Gunakan QString::number():

int i = 42;
QString s = QString::number(i);

2
Inilah pertanyaan yang lebih menarik: apakah ada cara yang lebih cepat? Saya mengalami masalah di mana versi ini hampir memakan waktu lebih lama daripada seluruh pemrosesan sesudahnya ...
Zeks

Maka Anda mungkin ingin mengerjakan buffer yang dialokasikan sebelumnya ... tetapi ini terdengar seperti pertanyaan terpisah.
Georg Fritzsche

122

Dan jika Anda ingin memasukkannya ke dalam string dalam konteks teks tertentu, lupakan +operator. Cukup lakukan:

// Qt 5 + C++11
auto i = 13;    
auto printable = QStringLiteral("My magic number is %1. That's all!").arg(i);

// Qt 5
int i = 13;    
QString printable = QStringLiteral("My magic number is %1. That's all!").arg(i);

// Qt 4
int i = 13;    
QString printable = QString::fromLatin1("My magic number is %1. That's all!").arg(i);

2
Karena Anda menyebut +operator, hati-hati di sekitar bilangan bulat, karena mungkin bekerja dengan baik tetapi secara internal, operator+(const QString &s, char c)implementasinya disebut, dan string tidak akan berisi bilangan bulat sebagai angka tetapi QChar::fromAscii(c)setara
x29a

3
Karena Anda menyebutkan operator +, Anda sebenarnya dapat melakukannya, tetapi memahami apa yang terjadi: QString p = s + QString :: number (1); menjadi QString berfungsi dengan baik. Jadi, pada dasarnya QString + QString tidak apa-apa, QString + int buruk .
David Sánchez

28

Selain itu untuk mengonversi apa pun yang Anda inginkan, Anda dapat menggunakannya QVariant. Untuk intke QStringAnda mendapatkan:

QVariant(3).toString();

A floatke a stringatau stringke float:

QVariant(3.2).toString();
QVariant("5.2").toFloat();

1
QVariantrulez!
Mr.Coffee

Sebut saya gila, tetapi saya akan lebih sering menggunakan pertanyaan ini sebagai "Bagaimana mengonversi nomor menjadi QString?", Ini sebagai jawaban utama untuk konversi yang ringan, dan jawaban lainnya untuk perawatan khusus.
mr3

17

Namun pilihan lain adalah menggunakan QTextStream dan <<operator dengan cara yang sama seperti yang Anda gunakan coutdi C ++:

QPoint point(5,1);
QString str;
QTextStream(&str) << "Mouse click: (" << point.x() << ", " << point.y() << ").";

// OUTPUT:
// Mouse click: (5, 1).

Karena operator <<()kelebihan beban, Anda dapat menggunakannya untuk banyak jenis, bukan hanya int. QString::arg()kelebihan beban, misalnya arg(int a1, int a2), tetapi tidak ada arg(int a1, QString a2), jadi gunakan QTextStream()dan operator<< nyaman saat memformat string yang lebih panjang dengan tipe campuran.

Perhatian: Anda mungkin tergoda untuk menggunakan sprintf()fasilitas ini untuk meniru printf()pernyataan gaya C , tetapi disarankan untuk menggunakan QTextStreamatau arg()karena mereka mendukung Unicode strings.


14

Saya selalu menggunakan QString::setNum().

int i = 10;
double d = 10.75;
QString str;
str.setNum(i);
str.setNum(d);

setNum()kelebihan beban dalam banyak hal. Lihat QStringreferensi kelas.


12

Dalam bentuknya yang paling sederhana, gunakan jawaban Georg Fritzsche

Untuk sedikit mahir, Anda bisa menggunakan ini,

QString QString::arg ( int a, int fieldWidth = 0, int base = 10, const QChar & fillChar = QLatin1Char( ' ' ) ) const

Dapatkan dokumentasi dan contohnya di sini ..


Sayangnya, tautan ke situs Nokia tidak lagi berfungsi.
Eliyahu Skoczylas

3

Hanya untuk kelengkapan, Anda dapat menggunakan pustaka standar dan melakukannya QString qstr = QString::fromStdString(std::to_string(42));


3

Jika Anda membutuhkan pemformatan angka sadar-lokal, gunakan QLocale :: toString sebagai gantinya.

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.