Làm cách nào để chuyển đổi int sang QString?


Câu trả lời:


656

Sử dụng QString::number():

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

2
Đây là câu hỏi thú vị hơn: có cách nào nhanh hơn không? Tôi đã gặp phải một vấn đề trong đó phiên bản này gần như mất nhiều thời gian hơn toàn bộ quá trình xử lý sau đó ...
Zeks

Sau đó, bạn có thể muốn làm việc trên các bộ đệm được phân bổ trước ... nhưng điều này nghe có vẻ như một câu hỏi riêng biệt.
Georg Fritzsche

122

Và nếu bạn muốn đặt nó thành chuỗi trong một số ngữ cảnh văn bản, hãy quên +toán tử. Đơn giản chỉ cần làm:

// 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
Vì bạn đề cập đến +toán tử, hãy cẩn thận với các số nguyên, vì nó có thể hoạt động rất tốt nhưng bên trong, việc operator+(const QString &s, char c)triển khai được gọi và chuỗi không chứa số nguyên dưới dạng số nhưng QChar::fromAscii(c)tương đương với nó
x29a

3
Vì bạn đề cập đến toán tử +, bạn thực sự có thể làm điều đó, nhưng hiểu những gì đang xảy ra: QString p = s + QString :: number (1); QString hoạt động hoàn hảo. Vì vậy, về cơ bản QString + QString vẫn ổn, QString + int xấu .
David Sánchez

28

Hơn nữa để chuyển đổi bất cứ điều gì bạn muốn, bạn có thể sử dụng QVariant. Đối intvới một QStringbạn nhận được:

QVariant(3).toString();

A floatđến a stringhoặc a stringđến a float:

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

1
QVariantquy tắc!
Mr.Coffee

Gọi tôi là hạt dẻ, nhưng tôi sẽ sử dụng nhiều hơn câu hỏi là "Làm thế nào để chuyển đổi một số thành QString?", Đây là câu trả lời chính cho chuyển đổi nhẹ và các câu trả lời khác cho các phương pháp điều trị đặc biệt.
mr3

17

Tuy nhiên, một tùy chọn khác là sử dụng QTextStream<<toán tử theo cách tương tự như bạn sẽ sử dụng couttrong C ++:

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

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

Bởi vì toán tử <<()đã bị quá tải, bạn có thể sử dụng nó cho nhiều loại chứ không chỉ int. QString::arg()là quá tải, ví dụ arg(int a1, int a2), nhưng không có arg(int a1, QString a2), vì vậy việc sử dụng QTextStream()và toán tử <<thuận tiện khi định dạng các chuỗi dài hơn với các loại hỗn hợp.

Thận trọng: Bạn có thể bị cám dỗ sử dụng phương sprintf()tiện để bắt chước các printf()câu lệnh kiểu C , nhưng nên sử dụng QTextStreamhoặc arg()vì chúng hỗ trợ Unicode strings.


14

Tôi luôn luôn sử dụng QString::setNum().

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

setNum()bị quá tải theo nhiều cách. Xem QStringtài liệu tham khảo lớp.


12

Ở dạng đơn giản nhất, hãy sử dụng câu trả lời của Georg Fritzsche

Đối với một chút nâng cao, bạn có thể sử dụng này,

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

Lấy tài liệu và một ví dụ ở đây ..


Thật không may, liên kết đến trang web Nokia không còn hoạt động.
Eliyahu Skoczylas

3

Để hoàn thiện, bạn có thể sử dụng thư viện chuẩn và làm QString qstr = QString::fromStdString(std::to_string(42));


3

Nếu bạn cần định dạng số nhận biết miền địa phương, hãy sử dụng QLocale :: toString thay thế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.