3

と があり、QGraphicsView有効QGraphicsSceneにしました

this->setDragMode(QGraphicsView::RubberBandDrag);

ラバーバンド選択用。ただし、私のアプリケーションでは、CTRL キーを押してからマウスを動かしてラバーバンドの選択を開始する必要があるのは理にかなっています。独自の QRubberBand を作成せずにこれを達成できますか? そうでない場合、どうすれば再実装できますか?

4

2 に答える 2

3

QMainWindowand Sceneを含むa と言う場合、QGraphicsViewこれを行う 1 つの方法は、次のように QMainWindowのkeyPressEventandメソッドをオーバーロードすることです。keyReleaseEvent

void MyMainWindow::keyPressEvent( QKeyEvent * event )
{
  if( event->key() == Qt::Key_Control ) {
    graphicsView->setDragMode(QGraphicsView::RubberBandDrag);
  }
  QMainWindow::keyPressEvent(event);

}


void MyMainWindow::keyReleaseEvent( QKeyEvent * event )
{
  if( event->key() == Qt::Key_Control ) {
    graphicsView->setDragMode(QGraphicsView::NoDrag);
  }
 QMainWindow::keyReleaseEvent(event);

}

RubberBandDragこれにより、CTRL が押されている限り、選択モードが に設定されます。キーを再度離すと、ドラッグ モードがデフォルトに戻り、NoDrag選択は実行されません。どちらの場合も、イベントは QMainWindow 基本クラスの実装にも転送されます。これは、関連する場合と関連しない場合があります。

于 2014-06-27T12:36:25.447 に答える