Qt QGraphicsview和对象移动上的鼠标事件
我实现了一个Graphicsview,在其中我加载了一个图像,用户可以添加不同的项目,例如矩形或线条。用户还可以在场景中移动这些对象。到现在为止一切都很好 现在,我尝试以这种方式实现一些鼠标事件:Qt QGraphicsview和对象移动上的鼠标事件,qt,Qt,我实现了一个Graphicsview,在其中我加载了一个图像,用户可以添加不同的项目,例如矩形或线条。用户还可以在场景中移动这些对象。到现在为止一切都很好 现在,我尝试以这种方式实现一些鼠标事件: bool MainWindow::eventFilter(QObject *obj, QEvent *event) { if (obj == ui->graphicsView && enable_mouse_event==true) { if
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui->graphicsView && enable_mouse_event==true)
{
if (event->type() == QEvent::MouseButtonPress)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
point_mouse = ui->graphicsView->mapFrom(ui->graphicsView, mouseEvent->pos());
return true;
}
if (event->type() == QEvent::MouseMove)
{
int scroll_x, scroll_y;
scroll_x = ui->graphicsView->horizontalScrollBar()->value();
scroll_y = ui->graphicsView->verticalScrollBar()->value();
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
point_mouse_move = ui->graphicsView->mapFrom(ui->graphicsView, mouseEvent->pos());
QRect rect(point_mouse_move.x()+scroll_x-50, point_mouse_move.y()+scroll_y-50, 100, 100);
zoom_image = image_clone.copy(rect);
ui->zoom_label->setPixmap(QPixmap::fromImage(zoom_image));
return true;
}
}
return false
}
通过这种方式,可以识别press事件,而move事件只能在Qgraphicview对象的边界上识别(属性mouseTracking设置为true),并且我仍然可以移动另一个对象
为了解决移动事件的问题,我尝试通过添加以下内容来修改代码:
->viewport()
指向graphicview对象
这样,两个鼠标事件(按下和移动)都能正常工作,但我无法再移动其他对象(rect和line)
知道我如何识别所有鼠标事件并同时移动其他对象吗
谢谢问题是我过滤掉了事件,它们从未进入窗口。不要将返回设置为true,只需将返回设置为false!
多亏了@thuga我不太清楚您想要做什么,您是否正在尝试重新实现QGraphicsItem?添加QGraphicsRectItem、QGraphicsLineItem……不是更容易吗?这样,两个鼠标事件(按下和移动)都能正常工作,但我无法再移动其他对象(rect和line)。。可能是因为你过滤掉了事件,所以它永远不会进入视图?如果返回false会发生什么?这就是答案!多么愚蠢的错误!你说得对,谢谢@thuga
->viewport()