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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Координаты курсора мыши в GraphicsView  (Прочитано 8199 раз)
knf
Гость
« : Ноябрь 22, 2013, 21:22 »

Попытался вывести в label координаты мыши и вот что получилось:
Если узнавать координаты при нахождении курсора в главном окне, то все нормально
Код
C++ (Qt)
void MainWindow::mouseMoveEvent(QMouseEvent *myEvent)
{
   QPoint viewPos = myEvent->pos();
   QPointF scenePos = ui->graphicsView->mapFromGlobal(viewPos);
 
   ui->label->setText(QString::number(viewPos.x()) + " " + QString::number(viewPos.y()));
}
 
А как узнать в самом graphicsView так, чтобы левый верхний угол был (0,0)?
Записан
mutineer
Гость
« Ответ #1 : Ноябрь 23, 2013, 13:24 »

выводить scenePos
Записан
knf
Гость
« Ответ #2 : Ноябрь 23, 2013, 17:34 »

Если выводить scenePos то выводит непонятные координаты отрицательные.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #3 : Ноябрь 23, 2013, 21:57 »

координаты на самом деле правильные, у вас viewPort сдвинут
Записан
Dfxfufy
Гость
« Ответ #4 : Декабрь 10, 2013, 11:28 »

Схожий вопрос. Виджет главного окна (StalkerScene) содержит объект QGraphicsScene* scene. Необходимо определить координаты клика относительно верхнего левого угла сцены.
В тексте, что приведен ниже, rht_test - координаты некоего объекта на сцене. Привязывать событие клика к самому объекту нельзя по условиям задачи. Нужно найти экранные координаты клика на сцене, чтобы сопоставить координаты случайно возникающих объектов внутри некоторой окрестности клика. Далее будет пересчет координат клика в пикселях в некие другие координаты. Не могу найти в описании класса сцены как увязать координаты клика с координатами на сцене с учетом ее скроллинга и изменением размеров главного окна.

void StalkerScene::mousePressEvent(QMouseEvent *pe)
{
  if(pe->buttons() && Qt::LeftButton) {
     qDebug() << "pos.x() = " << pe->pos().x()
                  << " pos.y() =" << pe->pos().y();

    qDebug() << " rht_test.m_dX = " << rht_test.m_dX
         << " rht_test.m_dY = " << rht_test.m_dY;

    m_rhtGKr = recalcCoord(double(pe->pos().x()),double(pe->pos().y()));
    emit signalTDM();
  }
}

RHT StalkerScene::recalcCoord(double _x, double _y)
{
  RHT rhtGsKr;
  double x = _x - scene->sceneRect().topLeft().x();
  double y = _y - scene->sceneRect().topLeft().y();
  rhtGsKr.m_dX = getRightTop().m_dX - y*m_dWidthScale;
  rhtGsKr.m_dY = getLeftBottom().m_dY + x*m_dHeightScale;
  rhtGsKr.m_dZ = 0;
  return rhtGsKr;
}
« Последнее редактирование: Декабрь 10, 2013, 11:34 от Dfxfufy » Записан
_OLEGator_
Гость
« Ответ #5 : Декабрь 10, 2013, 14:57 »

Код
C++ (Qt)
QPointF QGraphicsView::mapToScene ( const QPoint & point ) const
Записан
Dfxfufy
Гость
« Ответ #6 : Декабрь 10, 2013, 18:06 »

Спасибо. Попробую Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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