提问人:todovvox 提问时间:11/2/2023 更新时间:11/2/2023 访问量:39
将鼠标左键按下事件发送到QGraphicsView时重置滚动条的问题
Problem with resetting scrollbars when left mouse press event is sent to QGraphicsView
问:
因此,我目前正在尝试每次用户在QGraphicsView上按中间按钮时使用ScrollHandDrag在鼠标上实现拖动模式。问题是 - 要实际使用滚动手拖动模式拖动,您必须左键单击。
我的解决方案是简单地在QGraphicsScene之后继承的类中覆盖MousePressEvent方法,并在此处捕获鼠标中键事件,访问使用此QGraphicsScene的QGraphicsView,在QGraphicsView上设置ScrollHandDrag拖动模式,然后从QGraphicsScene向QGraphicsView发送另一个事件,只需单击鼠标左键即可。这样,人们只需使用鼠标中键即可启用 ScrollHandDrag,而实际上只需使用该按钮即可拖动。
这基本上是这样完成的:
case Qt::MiddleButton: {
views()[0]->setDragMode(QGraphicsView::ScrollHandDrag);
QMouseEvent eventGraphicsView(QEvent::MouseButtonPress, event->pos(), event->scenePos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QApplication::sendEvent(views()[0]->viewport(), &eventGraphicsView);
break;
}
MousePressEvent必须在QGraphicsScene之后继承的类中被覆盖,因为考虑到现在代码的结构,QGraphicsView不可用。
这里的问题是,即使它工作正常并且我可以拖动 QGraphicsView - 每次我尝试拖动时,滚动条都会将其位置重置为以前的位置。视图似乎跳到最后一个位置,滚动条。
所以问题是——为什么会这样?事件应该有所不同吗?当我使用例如ctrl +左键单击用法实现它时,一切正常,尽管在此实现中我没有向QGraphicsView发送任何类型的事件,所以我想问题出在这里的某个地方。
答: 暂无答案
评论
mouseButtonPress
mousePressEvent()
setupUi()