2012-05-28 1 views
4

빠른 질문 않는 이유 :Qt는 mousemoveevent + Qt는 :: LeftButton

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

반환 0 대신 1을 graphicscene에 커서를 이동하는 동안 마우스 왼쪽 버튼을 누르고있을 때. 어쨌든 1을 반환하도록하려면 어쨌든 사용자가 마우스를 그래픽 씬 위로 드래그하면 알 수 있습니다. 감사.

답변

7

, 당신은 단지 buttons() (docs)를 사용할 수 있습니다. button() 이벤트를 발생시킨 마우스 버튼을 반환합니다. 이는 Qt::NoButton을 반환하는 이유입니다. buttons()은 이벤트 발생시 눌려진 버튼을 반환합니다. 이는 사용자가 수행 한 것입니다. 왼쪽 버튼이 buttons 특성을보고 누를 경우

+0

고마워요! 이것은 문제를 완벽하게 해결했습니다. – Justin

1

반환 값은 mouse move events 인 경우 항상 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; 

} 

시도 또한 MainWindow를이 이벤트 필터를 설치하는 것을 잊지 마세요. Spyke의 대답은 정확 비록

qApplicationobject->installEventFilter(this); 
+0

응답 해 주셔서 감사합니다. 비록 이것이 가장 간단한 해결책은 아니지만 필자는 내가 가지고있는 다른 잠재적 인 문제에 대비하여 eventFilters가 어떻게 작동 하는지를 계속 살펴볼 것입니다. 다시 한번 감사드립니다. – Justin

6

당신은 알 수 있습니다 도움이

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

희망을!

+0

아, 나는 처음에 응답을 읽었지만 그 게시물에 감사드립니다. – Justin