crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Координаты мыши
epishev
  опции профиля:
сообщение 7.4.2011, 8:35
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 23.3.2011
Пользователь №: 2533

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет, подскажите как получить координаты мыши,
относительно виджита, например QGraphicsView,

ну или на QGraphicsScene.

заранее спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
wiz29
  опции профиля:
сообщение 7.4.2011, 8:50
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Добрый день, есть несколько вариантов. Можно обработать несколько событий для QGraphicsScene или QGraphicsView установив eventFilter для соответствующих объектов, либо с помощью глобальной функции QCursor::pos() - которая возвращает координаты курсора мыши в глобальной системе и трансформировать данную точку сначала в систему координат QGraphicsView объекта методом QGraphicsView::mapFromGlobal, затем, полученный результат, в координаты сцены методом QGraphicsView::mapToScene.
Если же перехватывать события через eventFilter, тогда нужно перехватить событие QEvent::MouseMove , в данном событии содержаться данные о положении курсора с системе координат виджета. либо перехватить событие QEvent::GraphicsSceneMouseMove соответственно получим событие содержащее координаты курсора в системе координат сцены. Ну и третий способ, это пронаследоваться для нужного класса (QGraphicsView или QGraphicsScene) и переопределить соответствующие виртуальные методы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
epishev
  опции профиля:
сообщение 7.4.2011, 11:14
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 23.3.2011
Пользователь №: 2533

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(wiz29 @ 7.4.2011, 9:50) *
Добрый день, есть несколько вариантов. Можно обработать несколько событий для QGraphicsScene или QGraphicsView установив eventFilter для соответствующих объектов, либо с помощью глобальной функции QCursor::pos() - которая возвращает координаты курсора мыши в глобальной системе и трансформировать данную точку сначала в систему координат QGraphicsView объекта методом QGraphicsView::mapFromGlobal, затем, полученный результат, в координаты сцены методом QGraphicsView::mapToScene.
Если же перехватывать события через eventFilter, тогда нужно перехватить событие QEvent::MouseMove , в данном событии содержаться данные о положении курсора с системе координат виджета. либо перехватить событие QEvent::GraphicsSceneMouseMove соответственно получим событие содержащее координаты курсора в системе координат сцены. Ну и третий способ, это пронаследоваться для нужного класса (QGraphicsView или QGraphicsScene) и переопределить соответствующие виртуальные методы.


Распишите позжалуйста более подробно...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 7.4.2011, 11:50
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(epishev @ 7.4.2011, 12:14) *
Распишите позжалуйста более подробно...


Какой из вариантов конкретно?


если рассматривать "оторванную" от обработки событий реализацию, то она будет выглядеть примерно следующим образом:
 
#include <qcursor.h>
#include <qgraphicsview.h>

//возращает текущую позицию курсора в системе координат виджета gView
QPoint getViewCursorPos(const QGraphicsView& gView)
{
    return gView.mapFromGlobal(QCursor::pos());
}

//возращает текущую позицию курсора в системе координат сцены установленной в gView
QPointF getSceneCursorPos(const QGraphicsView& gView)
{
    return gView.mapToScene(getViewCursorPos(gView));
}


Либо ты можешь пронаследоваться от QGraphicsView:
class MyView
   : public QGraphicsView
{
    public:
         MyView(QWidget* parent = 0 );
        MyView(QGraphicsScene* scene, QWidget* parent = 0 );

    protected:

        //эту функцию реализуешь в соответсвии со своими потребностями.
        void mouseMoveEvent(QMouseEvent* event)
        {              
              QPoint viewPos = event->pos();//позиция в системе координат виджета
              QPointF scenePos(mapToScene(viewPos));//позиция в системе координат сцены.
              //твой код....
              QGraphicsView::mouseMoveEvent(event);
        }
};//class MyView


Сообщение отредактировал wiz29 - 7.4.2011, 11:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.12.2024, 1:41