0

我在QHeaderView子类中有一个子QTreeView类,标题向代表提供信息,这些信息会影响他们如何绘制自己。标头接收控制这些值的鼠标事件。

我还希望我的委托编辑器小部件提供相同的功能,但不是复制和粘贴将鼠标值转换为标题可以使用的值的代码,我认为将其重新发送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 );

为什么header_没有收到事件?

4

1 回答 1

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;
}

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

于 2012-06-10T11:46:38.137 回答