2013-04-16 11 views
3

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

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 вместо в верхнем левом углу всего виджета. кто-нибудь знает, как сделать эту работу, я подумал из своего кода, что это то, что он делал, но оказывается, что это не так, iv посмотрел вокруг какое-то время, но я ничего не придумывал

любая помощь была бы очень благодарна.

ответ

4

Reimplement the 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.

+0

спасибо! !! thats работает красиво, теперь я знаю, что мой верхний левый угол больше будет теперь (0,0), но есть ли какая-либо форма функции bounds() или что-то, что я могу сделать, чтобы оторвать нижнюю правую координату. Im в основном помещает карту в качестве изображения в 'QGrpahicsView' и хочет найти координату xy кликов, поэтому я не могу преобразовать это значение в long long, однако для этого нужно, чтобы в верхнем левом и правом нижнем углу карты отображалось значение – AngryDuck

+0

' ui- > graphicsView-> rect(). bottomLeft() 'Дает вам нижний угол в координатах виджетов вида. Это то, что вы хотели? – cmannett85

+0

haha ​​bottom right был на самом деле тем, чем я был, но я думаю, что смогу работать, что один из 'ui-> graphicsView-> rect(). BottomRight()' ?? приветствия, хотя я не согласен с ответом, вы меня очень долго спасли – AngryDuck

Смежные вопросы