2014-04-25 8 views
4

QML 신호 처리기의 이벤트를 C++ 프로 시저로 전파하려고하지만 "이벤트 개체"를 전달하는 방법을 알지 못합니다. 이 상황을보고 SomeType에 특히주의하십시오. QML에서, 나는 MouseArea 내가 전파 wanto되는 내 사용자 정의 개체의 인스턴스를 생성,QML 이벤트를 C++로 전파

class Tool : public QQuickItem 
{ 
    . . . 

public slots: 
    virtual void onMousePositionChanged(SomeType *event); 
} 

다음 :

먼저 나는 QML에서 호출 할 수있는 슬롯이있는 사용자 정의 QML 항목을 만들 ~에 이벤트.

MouseArea { 
    hoverEnabled: true 
    onPositionChanged: { 
     var event = . . . 
     tool.onMousePositionChanged(event); 
    } 
} 

Tool { 
    id: tool 
} 

그리고 문제가 있습니다. 방법을 전달하는 SomeType의 인스턴스를 어셈블하는 방법을 모르겠습니다. 실제로 내가 무엇을 선택해야할지 모르겠다 SomeType. 이상적으로 QQuickMouseEvent이 될 것이므로 tool.onMousePositionChanged(mouse)을 호출 할 수는 있지만 어떤 이유로이 유형은 C++ 코드에서 사용할 수 없습니다.

또한 QMouseEvent으로 생각 했으므로 속성을 다시 작성해야하지만이 클래스는 QML 코드에서 사용할 수없는 것으로 보입니다.

저는 Qt를 처음 접했으므로 어쩌면 저는 그것을 완전히 오용하고 있습니다. 내가 원했던 것은 마우스와 키보드를위한 가상 이벤트 핸들러를 가지고있는이베이스의 Tool 클래스를 가지고 필요에 따라 그것을 오버라이드하는 다른 툴들의 콜렉션을 생성하는 것입니다. 그것들은 사용자가 현재 도구를 선택할 수있는 일종의 도구 상자, 즉 아이콘이있는 그리드에 표시되어야합니다. 선택한 도구는 이벤트를 수신하는 도구입니다. 어떤 디자인 제안든지 환영받습니다.

답변

1

QEvent을 시도한 다음 event type을 필터링하는 데 event->type()을 사용하십시오.

+0

내가 이것을 시도하면 '오류 : 알 수없는 메소드 매개 변수 유형 : QEvent *'가 표시됩니다. – spbots

+0

QEvent를 포함 시켰습니까? –

+0

예, 플러그인의 C++ 클래스 헤더에 포함되어 있습니다. – spbots