2012-02-14 12 views
1

グローバルmouseReleaseEventを設定するにはどうすればいいですか?
私はQMainWindowを持っていて、その上にQFrameとinit QListViewを持っています。 QListViewをconstarctするウィジェットがあり、ウィジェットの中にはlablesとtextフィールドがあります。 私は私のアプリで私はすべてのウィジェットのmouseReleaseEventを実装する必要がどこでmouseReleaseを検出したいですか? (やや古い)文書here見れQtグローバルなmouseReleaseEventを設定する方法

void ItemWidget::mouseReleaseEvent(QMouseEvent *event) 
{ 
    if(event->button() == Qt::LeftButton) 
    { 
     ; 
    } 
    event->accept(); 
} 

答えて

2

QMouseEvent documentationによれば、マウスのプレスを受け取ったウィジェットもマウスをリリースします。だから、オリジナルのプレスを受け取ったウィジェットよりも、マウスのリリースを見てみる必要はありません。これは、通常、マウス「グラブ」と呼ばれます。

子供のいずれかにQt::WA_NoMousePropagationが設定されていないことを確認することもできます。設定されていると、マウスイベントが泡立ちません。

本当にすべてのマウスリリースイベントをキャッチしたい場合は、event filterをQApplication自体にインストールすることができます。それは重たい解決策ですが、すべてのマウスリリースイベントを取得する必要があります。

1

イベントは、デフォルトでウィジェットによって無視され、その親に伝播されていることを示しています。したがって、あなたのウィジェットの全てをあなたのメインのアプリケーションウィジェット(または「孫」など)の子にする場合、アプリケーションウィジェットにイベントハンドラをインストールすればよいだけです。

+0

親であるすべてのコンポーネントを確認した後、すべて シームが同じものを持つようにするために、私はこれをチェックするために使用しました。QString c(m_CurrentWidget-> metaObject() - > className()); まだそれはdosnt仕事です – user63898

関連する問題