2010-07-09 36 views

Trả lời

495

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

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

Đâ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 đề mà 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

+0

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

8

Trong đó là hình thức đơn giản, 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à ví dụ here ..

+0

Thật không may, liên kết đến trang web của Nokia không còn hoạt động nữa. –

96

Và nếu bạn muốn đặt nó vào chuỗi trong một số ngữ cảnh văn bản, hãy quên đi toán tử +. 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); 
+0

Vì bạn đề cập đến toán tử '+', cẩn thận xung quanh các số nguyên, vì nó có thể hoạt động tốt nhưng bên trong, thực thi 'operator + (const QString & s, char c)' được gọi, và chuỗi không chứa số nguyên như số nhưng nó 'QChar :: fromAscii (c)' tương đương – x29a

+1

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

10

Tôi 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 tham chiếu lớp QString.

12

Tuy nhiên, lựa chọn khác là sử dụng QTextStream<< điều hành theo cách tương tự như bạn sẽ sử dụng cout trong C++:

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

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

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

Chú ý: Bạn có thể bị cám dỗ để sử dụng cơ sở sprintf() để bắt chước phong cách C printf() báo cáo, nhưng nó được khuyến khích để sử dụng QTextStream hoặc arg() vì họ hỗ trợ Unicode string s.

16

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 với một int đến một QString bạn nhận được:

QVariant(3).toString(); 

Một float đến một string hoặc một string đến một float:

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

'QVariant' rulez! –

+0

Hãy gọi cho tôi các loại hạt, nhưng tôi muốn sử dụng nhiều hơn câu hỏi là "Cách chuyển đổi 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

-1

Chỉ cần cho đầy đủ, bạn có thể sử dụng thư viện tiêu chuẩn và làm QString qstr = QString::fromStdString(std::to_string(42));

Các vấn đề liên quan