发送的事件被忽略

时间:2012-06-09 13:46:42

标签: c++ qt event-handling

我在QHeaderView子类中有一个QTreeView子类,标题为代理提供了影响他们自己绘制方式的信息。标头接收控制这些值的鼠标事件。

我还希望我的委托编辑器小部件提供相同的功能,但不是复制和粘贴将鼠标值转换为标头可以使用的值的代码,我认为重新发送{{1在它上面。

所以我复制了该事件并将其发送(如docs中所述):

QMouseEvent

只有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 ); 没有收到活动?

1 个答案:

答案 0 :(得分: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;
}

它没有影响标题正常运行的方式,至少就我使用它的方式而言。