2011-08-10 4 views
8

두 QStrings을 연결 : + 내가 (즉, directory:/karim/pic5.jpg을해야한다) 문자열과 정수를 연결하는 것을 의미합니다는 ++ Qt를 사용하여 내가 C에서 이런 일을하고 싶지 정수

int i = 5; 
QString directory = ":/karim/pic" + i + ".jpg"; 

. 어떻게해야합니까?

+11

C++ CONCATENATE 문자열과 INT http://stackoverflow.com/questions/191757/c-concatenate-string-and-int 거기에 그것을 할 수있는 8 가지 방법에 답이 있습니다. – Vache

+0

태그는 그가 'qt'에 대한 대답을 원한다는 것을 나타냅니다. "duplicate"의 대답은 그것을 제공하지 않습니다. –

+0

내 편집자를 확인하십시오 –

답변

27

Qt의 관용구는 QString의 arg() 기능입니다.

QString directory = QString(":/karim/pic%1.jpg").arg(i); 
+0

컴파일 타임에 생성되는'QStringLiteral (":/karim/pic % 1.jpg"). arg (i);'가 약간 낫습니다. https://woboq.com/blog/qstringliteral.html – Robin

2
#include <sstream> 
#include <string> 

int i = 5; 

std::stringstream s; 
s << ":/karim/pic" << i << ".jpg"; 

std::string directory = s.str(); 
+1

나는's.str()'이 아니라's.string()' –

+0

이 맞다고 생각한다. –

+0

내 편집 녀석을 확인하십시오 –

11

: 이것은 매우 유사한 한 줄이 C++11을 사용으로 수행 할 수 있습니다

(EDIT.이 QString을 언급 편집하기 전에 질문에 대한 답변입니다 QString를 들어, the newer answer 참조)

int i = 5; 
std::string directory = ":/karim/pic" + std::to_string(i) + ".jpg"; 

테스트 : 오래된 컴파일러와 https://ideone.com/jIAxE

, 그것은 Boost로 대체 할 수 있습니다 :

int i = 5; 
std::string directory = ":/karim/pic" + boost::lexical_cast<std::string>(i) + ".jpg"; 

테스트 : https://ideone.com/LFtt7

그러나 문자열 스트림 객체를 함께 할 수있는 고전적인 방법.

int i = 5; 
std::ostringstream oss; 
oss << ":/karim/pic" << i << ".jpg"; 
std::string directory = oss.str(); 

테스트 :

+0

흥미 롭습니다. 나는이 시간에'operator + (const char *, const std :: string &)'에 과부하가 있다는 것을 전혀 몰랐다. 그래서 항상 문자열 생성자에서 내 리터럴을 감쌀 수밖에 없었다. –

+0

내 편집자를 확인하십시오 –

+0

@ 카림 M. 엘 전화 : 오, QString 이후 (편집 후), 헥사의 코멘트로 이동하십시오. 다행스럽게도 답변이 게시 될 수 있도록 다시 열리게되기를 바랍니다. – Cubbi