2011-01-24 5 views

답변

24

sprintf 메서드를 사용할 수 있지만 유니 코드를 지원하므로 arg 메서드를 사용하는 것이 좋습니다.

QString str; 
str.sprintf("%s %d", "string", 213); 
125

당신 때문에이 방법은 sprintf를 선호한다이

QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", "Jane"); 
// You get "~/Tom-Jane.txt" 

같은 QString.arg를 사용할 수 있습니다

문자열의 위치를 ​​변경 대체, 예를 들어,의 순서를 변경하지 않고

// To get "~/Jane-Tom.txt" 
QString my_formatted_string = QString("%1/%3-%2.txt").arg("~", "Tom", "Jane"); 

또는 인수 유형을 변경하더라도 형식 문자열을 변경하지 않아도됩니다.

// To get "~/Tom-1.txt" 
QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", QString::number(1)); 

자세히 알 수 있듯이 변경 사항은 최소화되어 있습니다. 물론, 대부분의 타입이 올바르게 오버로드되기 때문에 일반적으로 QString :: arg()에 전달되는 타입을 신경 쓰지 않아도됩니다.

QString :: arg()는 std :: string을 처리하지 못합니다. std :: string에서 QString :: fromStdString()을 호출하여 QString :: arg()에 전달하기 전에 QString으로 변환해야합니다. QString을 사용하는 클래스를 std :: string을 사용하는 클래스와 분리하십시오. 또는 가능하다면 QString으로 전환하십시오.

업데이트 : 예는 Frank Osterfeld에게 업데이트되었습니다.

업데이트 : 예는 alexisdm 덕분에 업데이트되었습니다.

+17

.arg (x) .arg (y) .arg (z) 대신 .arg (x, y, z)를 사용하여 .arg() 체인을 피하십시오. 둘 다 더 빠르고 안전합니다. 문자열 x에. "% 1", y는 % 2 대신 % 1을 (를) 대체합니다. 일반적으로 의도 한 것이 아닙니다. –

+3

주문을 변경할 수는 있지만 번호가 매겨진 인수는 제거 할 수 없습니다. 예를 들어, QString ("% 3"). arg ("~", "Tom", "Jane") 결과는 "~"입니다. 처음에는 보이지 않는 것만큼이나 유용하지는 않습니다 ... – iforce2d

+0

아마도 arg()에 추가 인수를 남겨 두는 것이 좋습니다. sprintf에서 인수의 유형을 변경하면 형식 문자열에서 더 많은 변경을 수행해야합니다. –

관련 문제