6

簡単な質問、なぜですか:

void roiwindow::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{ 
    QGraphicsScene::mouseMoveEvent(event);
    qDebug() << event->button();
}

グラフィックシーンでカーソルを動かしながらマウスの左ボタンを押していると、1ではなく0が返されます。とにかくこれを1に戻して、ユーザーがグラフィックシーン上でマウスをドラッグしていることを確認できるようにする方法はありますか。ありがとう。

4

3 に答える 3

13

Spykeの答えは正しいですが、buttons()docs)を使用するだけです。 イベントの原因button()となったマウスボタンを返します。これが、イベントを返す理由です。しかし、イベントが発生したときに押したままのボタンを返します。これはあなたが求めているものです。Qt::NoButtonbuttons()

于 2012-05-28T07:15:22.117 に答える
10

buttonsプロパティを見ると、左ボタンが押されたかどうかを知ることができます。

if ( e->buttons() & Qt::LeftButton ) 
{
  // left button is held down while moving
}

お役に立てば幸いです。

于 2012-05-28T07:29:58.287 に答える
1

マウス移動イベントの場合、戻り値は常にQt::NoButtonです。これを解決するには、イベントフィルターを使用できます。

これを試して

bool MainWindow::eventFilter(QObject *object, QEvent *e)
{

 if (e->type() == QEvent::MouseButtonPress && QApplication::mouseButtons()==Qt::LeftButton)
 {
  leftbuttonpressedflag=true;
 }

  if (e->type() == QEvent::MouseMove)
 {
   QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(e);
   if(leftbuttonpressedflag && mouseEvent->pos()==Inside_Graphics_Scene)
   qDebug("MouseDrag On GraphicsScene");
 }

 return false;

}

また、このイベントフィルターをメインウィンドウにインストールすることも忘れないでください。

qApplicationobject->installEventFilter(this);
于 2012-05-28T04:25:19.533 に答える