2012-06-09 2 views
0

QTreeView 하위 클래스에 QHeaderView 하위 클래스가 있고이 헤더는 대리인에게 정보를 제공하여 자신을 페인트하는 방법에 영향을줍니다. 헤더는 이러한 값을 제어하는 ​​마우스 이벤트를 수신합니다.보낸 이벤트가 무시되었습니다.

위젯 편집기 위젯이 동일한 기능을 제공하기를 원했지만 마우스 값을 헤더에서 사용할 수있는 값으로 변환하는 코드를 복사하여 붙여 넣기보다는 QMouseEvent을 다시 보내는 것이 더 쉽다고 생각했습니다. 그것.

그래서 나는 이벤트를 복사합니다 (docs에서 언급 한 바와 같이) 그것을 보내

QMouseEvent e(event->type(), event->pos(), event->button(), 
       event->buttons(), event->modifiers()); 
Sy_application::sendEvent(&header_, &e); 

header_ 결코를받지 않습니다.

QMouseEvent* e = new QMouseEvent(QEvent::MouseButtonPress, event->pos(), 
            event->button(), event->buttons(), 
            event->modifiers()); 
Sy_application::postEvent(&header_, e); 

header_가 이벤트를 수신하지 않고 : 이벤트를 게시하는 것은 같은 효과가 있습니다?

+0

이것은 [이벤트 필터링] (http://qt-project.org/doc/qt-4.8/eventsandfilters.html#event-filters)으로 인한 것일 수 있지만 그저 추측 일뿐입니다 ... – tmpearce

+0

I haven ' 설치되어 있지 않습니다. 'sendEvent (....)'가 true를 반환하면 _something_이 처리하고 있음을 의미합니다. 'QHeaderView' 소스 코드를 살펴보고 내장 소스 코드가 있는지 살펴 보겠습니다. – cmannett85

+0

@tmpearce 아니,이 동작을 일으키는 것처럼 보이는'QHeaderView' 또는'QAbstractItemView :: event (QEvent * e)'소스 코드에는 아무것도 없습니다. – cmannett85

답변

0

이 문제를 일으키는 상위 클래스에 대해서는 아무런 언급이없는 것으로 보입니다. 실험으로 나는 수동으로 마우스 핸들러를 호출하는 내 헤더 클래스에서 event(QEvent* event)을 오버라이드, 지금은 완벽하게 작동합니다 : 그것은 헤더는 방법으로 지금까지 이상에서 정상적으로 작동하는 방식에 영향을하지 않은

bool Sy_timeLineHeader::event(QEvent* event) 
{ 
    switch (event->type()) { 
    case QEvent::MouseButtonPress: 
     mousePressEvent(static_cast< QMouseEvent* >(event)); break; 
    case QEvent::MouseButtonRelease: 
     mouseReleaseEvent(static_cast< QMouseEvent* >(event)); break; 
    case QEvent::MouseMove: 
     mouseMoveEvent(static_cast< QMouseEvent* >(event)); break; 
    default: 
     return QHeaderView::event(event); 
    } 

    return true; 
} 

나는 그것을 사용하고있다.

관련 문제