Событие Click для QGraphicsView Qt

Я сделал графический интерфейс в Qt, который в основном представляет собой виджет с QGraphicsView, у меня есть функция:

void GUI::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        QPointF mousePoint = ui->graphicsView->mapToScene(event->pos());
        qDebug() << mousePoint;
    }
}

который ссылается на общедоступный слот:

  void mousePressEvent(QMouseEvent *event);

это показывает мне на консоли координату x, y того места, где я щелкнул, однако в настоящее время это работает со всем виджетом, и в идеале я хотел бы, чтобы x, y (0,0) был в верхнем левом углу QGraphicsView вместо в левом верхнем углу всего виджета. кто-нибудь знает, как заставить это работать, я думал из своего кода, что это то, что он делал, но оказалось, что это не так, я некоторое время оглядывался, но я ничего не придумал

любая помощь будет очень признательна, спасибо.


person AngryDuck    schedule 16.04.2013    source источник


Ответы (1)


Реализация mousePressEvent(QMouseEvent *event) из QGraphicsView не вашего виджета будет "правильным" способом сделать это. В противном случае вы можете взломать его с помощью:

// Detect if the click is in the view.
QPoint remapped = ui->graphicsView->mapFromParent( event->pos() );
if ( ui->graphicsView->rect().contains( remapped ) )
{
     QPointF mousePoint = ui->graphicsView->mapToScene( remapped );
}

Это предполагает, что виджет является родителем QGraphicsView.

person cmannett85    schedule 16.04.2013
comment
Большое Вам спасибо!!!! это работает хорошо, теперь я знаю, что мой верхний левый угол теперь будет (0,0), но есть ли какая-то форма функции bounds() или что-то, что я могу сделать, чтобы вывести нижнюю правую координату. В основном я помещаю карту в качестве изображения в QGrpahicsView и хочу найти координату xy кликов, поэтому я не могу преобразовать это в значения lat long, однако для этого мне нужен верхний левый и нижний правый угол карты. - person AngryDuck; 16.04.2013
comment
ui->graphicsView->rect().bottomLeft() Дает вам нижний угол в координатах виджета. Это то, что вы хотели? - person cmannett85; 16.04.2013
comment
ха-ха, внизу справа было то, что я хотел, но я думаю, что смогу решить это ui->graphicsView->rect().bottomRight() ?? ура, хотя сейчас плохо принимаю ответ, вы сэкономили мне много времени - person AngryDuck; 16.04.2013