快速提问,为什么会这样:
void roiwindow::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsScene::mouseMoveEvent(event);
qDebug() << event->button();
}
当我在图形场景中移动光标时按住鼠标左键时返回 0 而不是 1。无论如何要让它返回 1,这样我就可以知道用户何时在图形场景中拖动鼠标。谢谢。
快速提问,为什么会这样:
void roiwindow::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsScene::mouseMoveEvent(event);
qDebug() << event->button();
}
当我在图形场景中移动光标时按住鼠标左键时返回 0 而不是 1。无论如何要让它返回 1,这样我就可以知道用户何时在图形场景中拖动鼠标。谢谢。
尽管 Spyke 的回答是正确的,但您可以使用buttons()
( docs )。 返回导致button()
事件的鼠标按钮,这就是它返回的原因;但返回事件触发时按住的按钮,这就是你所追求的。Qt::NoButton
buttons()
buttons
通过查看属性可以知道是否按下了左键:
if ( e->buttons() & Qt::LeftButton )
{
// left button is held down while moving
}
希望有帮助!
对于鼠标移动事件,返回值始终是 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);