Russian Qt Forum
Сентябрь 30, 2024, 12:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как отловить mouseDown/mouseUp  (Прочитано 6529 раз)
admsasha
Гость
« : Август 22, 2011, 14:42 »

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

так как можно реализовать это ?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Август 22, 2011, 14:57 »

Код
C++ (Qt)
virtual void mousePressEvent ( QMouseEvent * event )
virtual void mouseMoveEvent ( QMouseEvent * event )
virtual void mouseReleaseEvent ( QMouseEvent * event )
 
Записан

Qt 5.11/4.8.7 (X11/Win)
admsasha
Гость
« Ответ #2 : Август 22, 2011, 15:43 »

Тут только на срабатывание полного нажатия, единственное что я нашел, так это как узнать какую кнопку мыши нажали, но не нажата/опущена кнопка мыши.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Август 22, 2011, 16:35 »

Тут только на срабатывание полного нажатия, единственное что я нашел, так это как узнать какую кнопку мыши нажали, но не нажата/опущена кнопка мыши.
Что такое "полное нажатие"  Непонимающий

А что название методов не говорит об их предназначении Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
admsasha
Гость
« Ответ #4 : Август 22, 2011, 16:52 »

Это нажать кнопку, отпустить кнопку мышки Веселый

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

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


Кликаю на форму. mousePressEvent срабатывает (при нажатии кнопки,MouseDown), mouseReleaseEvent  нет... Не пойму, что не так делаю  Непонимающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Август 22, 2011, 17:33 »

Кликаю на форму. mousePressEvent срабатывает (при нажатии кнопки,MouseDown), mouseReleaseEvent  нет... Не пойму, что не так делаю  Непонимающий
А если попробовать нажать, подвинуть мышу, а затем отпустить?
Записан
admsasha
Гость
« Ответ #6 : Август 22, 2011, 17:41 »

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

Кстати, у меня
OS: mandiva linux 2010.2
Qt version 4.7.1
Записан
mks
Гость
« Ответ #7 : Август 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);
}
Насколько такой подход правильный, не знаю, возможно есть более правильные способы.
Записан
UNION labs
Гость
« Ответ #8 : Август 24, 2011, 10:19 »

проверьте, включен ли трэкинг - setMouseTracking(true)
« Последнее редактирование: Август 24, 2011, 10:30 от UNION labs » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.125 секунд. Запросов: 23.