1

mouseMoveEvent のオーバーロードに問題があります。

QGraphicsView をサブクラス化し、mousePressEvent、mouseMoveEvent、および mouseReleaseEvent をオーバーロードしました。これらのイベントを使用して、ラインであるカスタム QGraphicsItem を描画しています。(mousePress - 線の始点を設定し、mouseMove は線をカーソルに追従させ、2 回目の mousePress は線の終点を設定し、mouseRelease は線の描画を停止します。)

また、別のカスタム アイテム - Node.js も作成しました。ノードは mousePress イベントで描画されます。線とノードの描画を区別するための 2 つのフラグがあります。Node の ItemIsMovable フラグを true に設定し、Node クラスに mouseMoveEvent を再実装して、ノードを移動させました (座標を変更して再描画しました。うまくいきました)。

問題は、QGraphicsView のサブクラス (線の描画用) に mouseMoveEvent を実装したときに、Node クラスの mouseMoveEvent が機能しなくなり、ノードが動かなくなったことです。どうすればこれを修正できますか?

お時間をいただきありがとうございます。ご協力をお願いいたします。

4

1 に答える 1

3

QGraphicsView実装から基本クラス ( ) 実装を呼び出す必要があります。そうしないと、マウス イベントが処理されQGraphicsViewず、シーンとその項目に渡されません。

void MyView::mousePressEvent(QMouseEvent* e) {
  QGraphicsView::mousePressEvent(e);
  //your implementation
}
于 2013-10-21T22:00:10.877 に答える