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 に答える