2013-07-22 5 views
4

신호가 방출되고 QML로 캡처됩니다. 그러나 신호에 첨부 된 매개 변수를 읽으려고하면 "정의되지 않음"을 얻습니다. 다음은 일부 코드 단편입니다. 도움을 미리 주셔서 감사합니다!QML로 C++ 신호 받기

mymodel.h

class MyModel : public QObject 
{ 
    Q_OBJECT 

    ... 

    signals: 
     void mySignal(float a, some::enum b) 

    ... 
} 

mymodel.cpp

someotherclass.cpp

무효 (이 단순히 emit mySignal(1.0, 2.0); 문제가되지 않습니다) 신호를 방출하는 무언가를 SomeOtherClass :: setupQML() { ...

QQuickView *view = new QQuickView(); 

QWidget *container = QWidget::createWindowContainer(view); 

... 

QmlRootData = new RootData(); 

view->rootContext()->setContextObject(QmlRootData); 
view->rootContext()->setContextProperty("MyModel", model); 
view->setSource(QUrl("main.qml")); 
view->setResizeMode(QQuickView::SizeRootObjectToView); 

QObject* rootObj = view->rootObject(); 

... 

} 예상 한

Rectangle { 
    Connections { 
     target: MyModel 
     onMySignal: console.log(a) 
    } 
} 

console.log(a)가 호출되는

main.qml; 그러나 출력이 "1.0"이 될 것으로 예상되지만 간단히 "정의되지 않음"이라고 표시되며 이유가 확실하지 않습니다. Qt 5.1과 Qt Quick 2.0을 사용하고 있습니다.

답변

6

매개 변수를 QML 신호 처리기의 컨텍스트에 바인딩하는 프로세스에서 열거 형 매개 변수로 인해 오류가 발생했을 수 있습니다. 이 열거 형이 QML의 한 유형으로 드러난 것처럼 보이지 않기 때문에 올바르게 열거 할 수 없다고 생각합니다. 그러면 전체 프로세스가 손상 될 수 있습니다.

신호를 내보낼 때 두 개의 부동 소수점을 전달한다고 가정하면 실제로 float 및 enum 대신에 두 개의 float 입력이 필요합니까?

+1

네, 맞습니다. 열거 형을 꺼 냈고 예상대로 신호가 작동했습니다. 이것은 내가 동시에 방출 할 별도의 신호를 만들어야하기 때문에 실망 스럽습니다. 두 개의 수레로이 포스트를 만들 때 오타입니다. 내 코드에서는 float 및 enum처럼 정확합니다. 열거 형을 QML에 노출시키는 방법이 있습니까? – roundtheworld

+0

http://stackoverflow.com/questions/4461017/exposing-qts-q-enums-to-qml 이 적합하다고 보입니다. 답을 해결 된 것으로 표시하는 것을 잊지 마십시오! 행운을 빕니다! – Deadron

관련 문제