2014-03-12 4 views
2

개체 작성 완료시 신호를 보내려고합니다. 이와 같이 :계층 구조의 QML 신호에 액세스하십시오.

Component.onCompleted: mySignal() 

이것은 계층 구조의 깊은 QML 파일에 있습니다. 이제 C++에서이 신호에 액세스하기위한 두 가지 솔루션을 볼 수 있습니다.

는 먼저 main.qml 때까지 계층 구조를 신호를 통과 한 후 C++에서이 작업을 수행한다 :

//Create a Quick View object. 
QQuickView *view = new QQuickView(); 

//Object to access QML properties and childs. 
QObject *container = (QObject *) view->rootObject(); 

//Connect signal and slots 
QObject::connect(container, SIGNAL(mySignal()), this, SLOT(onMySignal())); 

내가 시도이를 슬롯이 호출되지 않습니다 어떤 이유. 그것은 main.qml에서 보내고 내보내는 다른 모든 신호에 대해 작동하지만 Component.onComplete에서 방출되지는 않습니다. 신호가 QML 측에서 방출되었지만 C++ 측에서 수신 된 적이 없는지 확인할 수 있습니다.

내가 시도한 두 번째 일은 신호를 main.qml로 전달하는 대신 원하는 신호를 내보내는 QML 파일에 대한 참조를 얻습니다. 나는 이렇게하려고했다 :

//Create a Quick View object. 
QQuickView *view = new QQuickView(); 

//Object to access QML properties and childs. 
QObject *container = (QObject *) view->rootObject(); 

//Connect signal and slots 
QObject::connect(container->findChild<QObject*>("mySignalQmlFile"), SIGNAL(mySignal()), this, SLOT(onMySignal())); 

여기서 mySignalQmlFile은 그 안에 정의 된 신호를 가진 주 사각형의 ID이다.

내가 오류 얻을 :

있는 QObject를 :: 연결 : 없음 같은 신호 QQuickRectangle_QML_54 :: mySignal을()에 .. \ GC의 \의 mainwindow.cpp : 62

내가 지금하는 방법을 잘 모르겠습니다을 발하다.

답변

1

첫 번째 시도에서는 신호와 슬롯을 연결하기 전에 신호가 방출되어 신호가 수신되지 않을 수도 있습니다.

두 번째 시도를 위해 "mySignalQmlFile"이 아닌 qml 파일의 objectName을 사용해야합니다.

다음 자습서를 읽는 것이 좋습니다. 당신은 신호와 슬롯을 연결하기 전에

http://developer.nokia.com/community/wiki/Using_objectName_to_find_QML_elements_from_Qt

또한, 귀하의 QML 파일 호출 또는 사용해야합니다. 그렇지 않으면 개체를 찾을 수 없기 때문에 동일한 오류가 발생합니다.

관련 문제