2013-05-06 2 views
-1

당신은 어디에서나 QString 객체를 매개 변수로 사용해야한다는 것을 알고 있습니다. C 스타일 문자열 만 사용할 수 있습니다. 예를 들어 showMessage 함수에는 QString이 필요합니다. 그러나이 함수에 C 스타일의 문자열을 전달하면 모든 것이 OK입니다. 여기에 QString 객체로 "%1 a sample text"을 생각해 볼 수 있습니다. 아마도!QString :: arg 함수를 사용할 수없는 이유는 무엇입니까?

statusBar()->showMessage("%1 a sample text"); 

그러나 우리는이 코드를 사용할 수없는 이유 :

기능 const char[]을 통과와 기능에 호출하지 않고, 더 implicit-conversion이 없다, 그래서 QStringimplicit-conversion이 사용되므로
statusBar()->showMessage("%1 a sample text".arg("This is ")); 
+0

아뇨! 왜 투표를하지 않을까요? – saeed

답변

5

, 당신이 const char[]에 방법 arg를 호출하려고하는, 즉 잘못된,

statusBar()->showMessage(QString("%1 a sample text").arg("This is ")); 
에 의해 QString을 구성

모두 괜찮습니다.

+0

이 코드가 QObject를 상속하는 클래스의 일부인 경우 QObject :: tr() 메서드를 사용하여 적은 수의 심볼을 작성할 수 있습니다. tr ("% 1 샘플 텍스트"). arg ("This is") – JustAnotherCurious

1

"..."의 형식은 const char*이며 따라서 QString이 아닙니다. QString이 유형 const char*의 파라미터를 취하는 생성자가 같은 이것은 특정 상황에서 그러나 C.

호환되도록 구비 C의 부작용 ++ (예컨대 operator+)이다 QString까지 암시 적 변환이 허용된다. 그러나이 경우 명시 적 변환을 사용해야합니다 (예 :

).
statusBar()->showMessage(QString("%1 a sample text").arg("This is ")); 
관련 문제