2016-06-17 1 views
1

MouseArea 마우스 이벤트를 C++로 연결하려고하지만 QQuickMouseArea은 개인 신호이므로 신호를 가져올 수 없습니다. 이처럼QML : C++에서 MouseArea의 마우스 이벤트 가져 오기

:

QObject::connect(mouseAreaObj, SIGNAL(released(QMouseEvent*)), 
       handlerObj, SLOT(handleEvent(QMouseEvent*))); 

이 문제를 해결하기 위해 어떤 방법이 있나요?

가능하지 않다면 Qt가 QQuickMouseArea에 액세스하는 것을 허용하지 않는 이유가 무엇인지 궁금합니다.

답변

1

대신 QQuickMouseArea 신호를 듣고, 당신은 그것이 QObject로 얻을 설정할 수 있습니다 handlerObj이처럼 mouseAreaObjevent filter가 AS : mouseAreaObj->installEventFilter(handlerObj).

그런 다음 handlerObjeventFilter을 구현해야합니다. 이 같은 아마 뭔가 :

bool HandlerObject::eventFilter(QObject* obj, QEvent* event) 
{ 
    if (event->type() == QEvent::MouseButtonRelease) 
     return handleEvent(static_cast<QMouseEvent*>(event)); 
    else 
     return false; 
} 
0

나는 QML mouseArea.clicked.connect(cppObject.onClicked)의 연결을 설정하고 예상대로 다음 C++에서 단순히 속성을 가진 QObject*을받은 :

void CppClass::onClicked(QObject *event) { 
    qDebug() << "clicked" << event->property("x").toInt(); 
}