2013-06-15 2 views
1

내 신호와 슬롯 모두 std::string 유형 매개 변수가 있습니다. 내 신호 클래스 B 및 클래스 A 슬롯에 있습니다. 매개 변수 형식을 int로 변경하면 신호가 작동하지만 std :: string.Any 제안이이 문제를 해결할 수있는 제안? 여기 std :: string 사용 실패 신호 및 슬롯

는 대기 연결을 사용하는 경우 내가

connect(this,SIGNAL(SignalB(std::string)),ClassA::PtrClassA,SLOT(MethodA(std::string))); 
+1

'std :: string'에서도 잘 작동합니다. 사용중인 신호와 슬롯에 대한 코드를 게시 할 수 있습니까? –

+1

std :: string을 메타 유형으로 등록 했습니까? – RobbieE

+0

@RobbieE 메타 타입으로 어떻게 등록합니까? – MistyD

답변

3

를 사용하는 코드입니다, 당신은 메타 형식으로 std::string을 등록해야합니다. 머리글 중 하나에 Q_DECLARE_METATYPE(std::string)을 사용하십시오. 코드 초기화시 qRegisterMetaType<std::string>();으로 전화하십시오.

자세한 내용은 QMetaType docs을 참조하십시오.

+0

이 '마법'이 항상 유용하지 않기 때문에이 대답은 당신이 제시 한대로 잘못되었습니다. 귀하의 문서에서 : "이 클래스는 QVariant 및 ** 대기열 ** 신호 및 슬롯 연결에서 형식을 정렬하는 도우미로 사용됩니다." – Lol4t0

+0

@Riateche 고마워요. 'qRegisterMetaType ("std :: string");'모든 클래스의 생성자에서 슬롯에 신호 연결을 설정하고 있습니까? – MistyD

+1

아니요, 전체 앱에 대해 한 번 호출해야합니다. –