Russian Qt Forum

Qt => Общие вопросы => Тема начата: admsasha от Август 22, 2011, 14:42



Название: как отловить mouseDown/mouseUp
Отправлено: admsasha от Август 22, 2011, 14:42
Хочу заставить graphicsView передвигаться мышкой
один из способов это обработка mouseDown/mouseMove/mouseUp
делаю так
graphicsView->installEventFilter(this);
потом в
eventFilter(QObject *o, QEvent *e){
Пытаюсь найти нужные события, но что-то mouseDown и mouseUp нету...

так как можно реализовать это ?


Название: Re: как отловить mouseDown/mouseUp
Отправлено: GreatSnake от Август 22, 2011, 14:57
Код
C++ (Qt)
virtual void mousePressEvent ( QMouseEvent * event )
virtual void mouseMoveEvent ( QMouseEvent * event )
virtual void mouseReleaseEvent ( QMouseEvent * event )
 


Название: Re: как отловить mouseDown/mouseUp
Отправлено: admsasha от Август 22, 2011, 15:43
Тут только на срабатывание полного нажатия, единственное что я нашел, так это как узнать какую кнопку мыши нажали, но не нажата/опущена кнопка мыши.


Название: Re: как отловить mouseDown/mouseUp
Отправлено: GreatSnake от Август 22, 2011, 16:35
Тут только на срабатывание полного нажатия, единственное что я нашел, так это как узнать какую кнопку мыши нажали, но не нажата/опущена кнопка мыши.
Что такое "полное нажатие"  ???

А что название методов не говорит об их предназначении ???


Название: Re: как отловить mouseDown/mouseUp
Отправлено: admsasha от Август 22, 2011, 16:52
Это нажать кнопку, отпустить кнопку мышки :D

Вообщем сделал так
void myWidget::mousePressEvent ( QMouseEvent * event ){
    qDebug() << "mousePressEvent ";
}

void myWidget::mouseReleaseEvent ( QMouseEvent * event ){
    qDebug() << "mouseReleaseEvent ";
}


Кликаю на форму. mousePressEvent срабатывает (при нажатии кнопки,MouseDown), mouseReleaseEvent  нет... Не пойму, что не так делаю  ???


Название: Re: как отловить mouseDown/mouseUp
Отправлено: Igors от Август 22, 2011, 17:33
Кликаю на форму. mousePressEvent срабатывает (при нажатии кнопки,MouseDown), mouseReleaseEvent  нет... Не пойму, что не так делаю  ???
А если попробовать нажать, подвинуть мышу, а затем отпустить?


Название: Re: как отловить mouseDown/mouseUp
Отправлено: admsasha от Август 22, 2011, 17:41
Кликаю на форму. mousePressEvent срабатывает (при нажатии кнопки,MouseDown), mouseReleaseEvent  нет... Не пойму, что не так делаю  ???
А если попробовать нажать, подвинуть мышу, а затем отпустить?
ничего не изменилось. Срабатывает только mousePressEvent.

Кстати, у меня
OS: mandiva linux 2010.2
Qt version 4.7.1


Название: Re: как отловить mouseDown/mouseUp
Отправлено: mks от Август 22, 2011, 19:46
Если я правильно понял и вы хотите перетягивать сцену мышкой, хватая её за любую точку, то я для этого переопределили 3 метода таким образом:
Код:
virtual void mousePressEvent ( QMouseEvent * event )
virtual void mouseMoveEvent ( QMouseEvent * event )
virtual void mouseReleaseEvent ( QMouseEvent * event )

Код:
void sch_symbol_editor::mousePressEvent(QMouseEvent * event)
{
  if (event->button() == Qt::RightButton)
  {
      m_dragging_ref_point.rx() = event->x();
      m_dragging_ref_point.ry() = event->y();
      QScrollBar* hBar = horizontalScrollBar();
      QScrollBar* vBar = verticalScrollBar();
      m_dragging_scroll_ref_point.rx() = hBar->value();
      m_dragging_scroll_ref_point.ry() = vBar->value();
      right_button_pressed = true;
  }
}
Код:
void sch_symbol_editor::mouseReleaseEvent ( QMouseEvent * event )
{
  if (event->button() == Qt::RightButton)
    right_button_pressed = false;
}
Код:
void sch_symbol_editor::mouseMoveEvent ( QMouseEvent * event )
{
  // если нажата правая кнопка мыши то смещаем вид за мышкой
  if (right_button_pressed)
  {
    QPoint p;
    p.rx() = event->x();
    p.ry() = event->y();
    QScrollBar* hBar = horizontalScrollBar();
    QScrollBar* vBar = verticalScrollBar();
    hBar->setValue(m_dragging_ref_point.x() - event->x() + m_dragging_scroll_ref_point.x() );
    vBar->setValue(m_dragging_ref_point.y() - event->y() + m_dragging_scroll_ref_point.y() );
  }
  else // если нет то вызываем обработчик по умолчанию
    QGraphicsView::mouseMoveEvent(event);
}
Насколько такой подход правильный, не знаю, возможно есть более правильные способы.


Название: Re: как отловить mouseDown/mouseUp
Отправлено: UNION labs от Август 24, 2011, 10:19
проверьте, включен ли трэкинг - setMouseTracking(true)