Russian Qt Forum

Qt => Общие вопросы => Тема начата: knf от Ноябрь 22, 2013, 21:22



Название: Координаты курсора мыши в GraphicsView
Отправлено: 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)?


Название: Re: Координаты курсора мыши в GraphicsView
Отправлено: mutineer от Ноябрь 23, 2013, 13:24
выводить scenePos


Название: Re: Координаты курсора мыши в GraphicsView
Отправлено: knf от Ноябрь 23, 2013, 17:34
Если выводить scenePos то выводит непонятные координаты отрицательные.


Название: Re: Координаты курсора мыши в GraphicsView
Отправлено: Fregloin от Ноябрь 23, 2013, 21:57
координаты на самом деле правильные, у вас viewPort сдвинут


Название: Re: Координаты курсора мыши в GraphicsView
Отправлено: Dfxfufy от Декабрь 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;
}


Название: Re: Координаты курсора мыши в GraphicsView
Отправлено: _OLEGator_ от Декабрь 10, 2013, 14:57
Код
C++ (Qt)
QPointF QGraphicsView::mapToScene ( const QPoint & point ) const


Название: Re: Координаты курсора мыши в GraphicsView
Отправлено: Dfxfufy от Декабрь 10, 2013, 18:06
Спасибо. Попробую :)