Qt 라벨의 문자열을 포맷하고 싶습니다. Qt의 C++로 프로그래밍하고 있습니다. 어떻게 Qt를에서 그런 일을 할QString을 포맷하는 방법은 무엇입니까?
NSString *format=[NSString stringWithFormat: ... ];
:
은 ObjC에서내가 좋아하는 뭔가를 쓸 것인가?
Qt 라벨의 문자열을 포맷하고 싶습니다. Qt의 C++로 프로그래밍하고 있습니다. 어떻게 Qt를에서 그런 일을 할QString을 포맷하는 방법은 무엇입니까?
NSString *format=[NSString stringWithFormat: ... ];
:
은 ObjC에서내가 좋아하는 뭔가를 쓸 것인가?
동일한 효과로 QString::arg()
을 사용하십시오.
sprintf
메서드를 사용할 수 있지만 유니 코드를 지원하므로 arg
메서드를 사용하는 것이 좋습니다.
QString str;
str.sprintf("%s %d", "string", 213);
당신 때문에이 방법은 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 덕분에 업데이트되었습니다.
.arg (x) .arg (y) .arg (z) 대신 .arg (x, y, z)를 사용하여 .arg() 체인을 피하십시오. 둘 다 더 빠르고 안전합니다. 문자열 x에. "% 1", y는 % 2 대신 % 1을 (를) 대체합니다. 일반적으로 의도 한 것이 아닙니다. –
주문을 변경할 수는 있지만 번호가 매겨진 인수는 제거 할 수 없습니다. 예를 들어, QString ("% 3"). arg ("~", "Tom", "Jane") 결과는 "~"입니다. 처음에는 보이지 않는 것만큼이나 유용하지는 않습니다 ... – iforce2d
아마도 arg()에 추가 인수를 남겨 두는 것이 좋습니다. sprintf에서 인수의 유형을 변경하면 형식 문자열에서 더 많은 변경을 수행해야합니다. –