2012-05-28 4 views
4

Быстрый вопрос, почему:Qt mousemoveevent + Qt :: LeftButton

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

возвращение 0 вместо 1, когда я, удерживая левую кнопку мыши при перемещении курсора в graphicscene. В любом случае, чтобы вернуть это значение 1, я могу сказать, когда пользователь перетаскивает мышь по графику. Благодарю.

ответ

7

Хотя ответ Spyke является правильным, вы можете просто использовать buttons() (docs). button() возвращает кнопку мыши, которая вызвала событие, поэтому оно возвращает Qt::NoButton; но buttons() возвращает кнопки, удерживаемые при запуске события, а это то, что вам нужно.

+0

Спасибо! Это решило проблему отлично. – Justin

1

Возвращаемое значение всегда Qt :: NoButton для mouse move events. Вы можете использовать фильтр событий, чтобы решить эту проблему.

Попробуйте

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); 
+0

Спасибо за ответ. Несмотря на то, что это не самое простое решение, я все еще буду смотреть на то, как eventFilters работают на всякий случай, если мне это нужно для какой-либо другой потенциальной проблемы, которую я имею. Еще раз спасибо. – Justin

6

Вы можете знать, если левая кнопка была нажата, глядя на buttons собственности:

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

Надеется, что помогли!

+0

А, я сначала прочитал ответ на камни, но я ценю сообщение. – Justin

Смежные вопросы