2014-06-23 2 views
8

Momentics IDE (기본 SDK)를 사용하여 BlackBerry 10 모바일 응용 프로그램을 개발 중입니다.어떻게 QVariant를 사용자 정의 클래스에 캐스트 할 수 있습니까?

나는 C++을 사용하여 해당 항목을 처리하려는 listview가 있습니다 (QML이 아닌 C++을 사용해야 함).

"연결"명령을 사용하여 색인 경로를 가져올 수 있지만 QVariant를 사용자 지정 클래스로 구문 분석하는 데 문제가 있습니다.

Q_ASSERT(QObject::connect(list1, SIGNAL(triggered(QVariantList)), this, SLOT(openSheet(QVariantList)))); 

QVariant selectItem = m_categoriesListDataModel->data(indexPath); 

나는 아래

Category* custType = static_cast<Category*>(selectItem); 

같은 정적 캐스트를 사용하려고하지만 반환

"invalid static_cast from type 'QVariant' to type 'Category*'" 

사람이 나를 도와 드릴까요?

+0

데이터를 모델에 추가하는 방법을 보여주는 코드를 추가 할 수 있습니까? – Kunal

+7

그런 경우 Q_ASSERT를 사용하지 마십시오! 릴리스 빌드에서는 Q_ASSERT가 작동하지 않으며 신호가 연결되지 않습니다. 정보를 주셔서 감사합니다 –

답변

12

qvariant_castqobject_cast을 사용해보세요.

QObject *object = qvariant_cast<QObject*>(selectItem); 
Category *category = qobject_cast<Category*>(object); 

또한 Q_ASSERT에 영구적 인 문장을 넣지 마십시오. 어설 션이 활성화되지 않은 경우에는 사용되지 않습니다.

+1

. "Q_DECLARE_METATYPE"에 대해, 나는이 [예제] (http://blackberry.github.io/Qt2Cascades-Samples/docs/threads-queuedcustomtype-src-block-hpp.html)와 같은 클래스 정의에 넣으려고했으나 작동하지 않습니다. "이 컨텍스트 내에서"반환합니다 (클래스 QObject "클래스 Q : 공용 QObject"있기 때문에이 클래스를 생각합니다) 및 클래스 정의 outisde 그것을 넣으려고 할 때 "서식 파일 선언을 블록 범위에서 나타날 수 없습니다"반환합니다. ". –

+0

@ user2072762 : 대답을 업데이트했습니다. – lpapp

+0

그것은 작동합니다. 많이 !! –

10

편집 : 비 QObject를 파생 유형, QVariant의 일부 유형을

//customtype.h 
class CustomType { 
}; 

Q_DECLARE_METATYPE(CustomType) 
관리로 당신의 유형에 등록 할 필요가 모든

먼저 (이 경우에 대한 최종 대회의 답변을 참조) 작동

그런 다음 당신은이 방법으로 QVariant에서 사용자 정의 유형을 검색 할 수 있습니다 동등이

CustomType ct = myVariant.value<CustomType>(); 

인 valent to :

CustomType ct = qvariant_cast<CustomType>(myVariant); 
+0

도움 주셔서 감사합니다. 당신이 설명하는 것처럼 "Q_DECLARE_METATYPE"명령을 넣으려고했지만 "내 컨텍스트 내에서"오류를 반환합니다. 내 사용자 지정 형식이 QOBject 클래스에서 상속되기 때문에 생각합니다. "class Category : public QObject" –

+0

@FinalContest가 맞습니다. 질문은 당신이 QObject에서 파생 된 유형을 다루고 있다고 언급하지 않습니다. – jbh

+0

귀하의 의견은 제게 많은 도움을주었습니다. 귀하의 대답이되어야하고, ldapps가 완전히 다른 질문에 대한 답변이되어야한다고 생각합니다. J.M.J는 원래 게시물의 QObject에서 파생되었음을 명시하지 않았기 때문에 – snb

관련 문제