Bagaimana cara mengubah int ke QString?

Jawaban:

656

Gunakan QString::number():

int i = 42;
QString s = QString::number(i);
Georg Fritzsche
sumber
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);
Kamil Klimek
sumber
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();
Gabriel de Grimouard
sumber
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.

Matthew Kraus
sumber
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.

Narek
sumber
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 ..

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

Morgan
sumber
3

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

André
sumber