2016-12-26 2 views
0

QLineEditをカスタムウィジェットにプロモートし、マウスイベントハンドラを再実装しようとしました。私のQLineEditベースのウィジェット(親はカスタムスクロールエリアです)の親によってmouseDoubleClickEvent()以外のすべてのマウスイベントを処理する必要があります。すべては、wheelEvent()を除いてうまくいきます。 QLineEditは依然としてマウスホイールを処理していますが、まだ親はありません。ここ は私の昇進QLineEditです:QWheelEvent :: ignore()は昇格したQLineEditでは機能しませんか?

HeightLineEdit::HeightLineEdit(QWidget* parent) : 
QLineEdit(parent) 
{ 
    this->setFocusPolicy(Qt::NoFocus); 
} 

void HeightLineEdit::mousePressEvent(QMouseEvent* event) 
{ 
    event->ignore(); 
} 

void HeightLineEdit::mouseMoveEvent(QMouseEvent* event) 
{ 
    event->ignore(); 
} 

void HeightLineEdit::mouseReleaseEvent(QMouseEvent* event) 
{ 
    event->ignore(); 
} 

void HeightLineEdit::mouseDoubleClickEvent(QMouseEvent* event) 
{ 
    this->setFocus(); 
    this->selectAll(); 
} 

void HeightLineEdit::wheelEvent(QWheelEvent* event) 
{ 
    event->ignore(); 
} 
+0

親にイベントフィルタをインストールしてみます:http://doc.qt.io/qt-4.8/eventsandfilters.html#event-filtersおよびhttp://stackoverflow.com/questions/16279003/how-to-disable -scrolling-functionality-on-wheel-event-qgraphicsview-qt-c –

+0

親にはすでにイベントフィルタがあり、ホイールは空き親領域で正常に動作します。子ウィジェットと重なっていてもスクロールのためのホイールを扱うには親が必要です。 – esterlein

答えて

0

QWheelEvent documentationから:「ホイールイベントは、マウスカーソルの下にウィジェットに送信されますが、そのウィジェットがイベントを処理しない場合、彼らは、フォーカスウィジェットに送信されます。」

親ウィジェットで子ウィジェットを処理する場合は、子ウィジェットにevent filterをインストールするか、子ウィジェットのwheelEventメソッドから直接親ウィジェットのメソッドを呼び出すことができます。

+0

おそらく私は、子ウィジェットのイベントフィルターであなたの提案を完全に理解していません。私の場合は、ハンドラ関数と同様に機能します。イベントフィルターでは、 'switch {}'にすべての 'QEvent'タイプをリストし、必要な場合は' QEvent :: ignore() 'を呼び出します。同じ効果。 – esterlein

+0

おそらく混乱する部分は削除されましたが、これは2番目の提案のためだけであって、回答にはあまり関連性のない情報は含まれていません。 – E4z9

関連する問題