2012-06-09 80 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

我沒有' t安裝任何。 'sendEvent(....)'返回true,這意味着_something_正在處理它。我會看看'QHeaderView'源代碼,看看是否有內置的,文檔沒有提到。 – cmannett85

+0

@tmpearce Nope,'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; 
} 

這並沒有影響到目前爲止頭正常工作,至少在結合的方式方法我正在使用它。