【发布时间】:2013-12-12 08:42:54
【问题描述】:
在 QGraphicsView 中,
setDragMode(QGraphicsView::ScrollHandDrag);
这行代码做了我想做的事:拖动时滚动内容。但是,如果我根据自定义需求实现了mouseMoveEvent 或mousePressEvent,setDragMode(QGraphicsView::ScrollHandDrag) 的魔力就会消失。
这些内置函数似乎有一些依赖关系,大多数时候它们很方便,但是当你实现其中一个时,你会破坏这些依赖关系之间的链,从而使其中一些消失。
我不想从头开始实现所有这些功能。如何解决这个困境?
==================编辑 12/13================
好的,我正在尝试,但是...
void MyView::mouseMoveEvent( QMouseEvent* event )
{
// Notice: event->button() always return Qt::NoButton for "mouse move events"
// so event->button() == Qt::LeftButton won't work in this case
if(event->buttons() & Qt::LeftButton)
{
this->dragMoveEvent(dynamic_cast<QDragMoveEvent*>(event));
}
else
{
...
}
}
这些代码失败,因为QMouseEvent* 不能转换为QDragMoveEvent*,知道吗?
【问题讨论】:
-
您是否尝试过在您的
mouseMoveEvent()和mousePressEvent()函数中调用QGraphicsView::mouseMoveEvent()和QGraphicsView::mousePressEvent()? -
感谢您的建议。但是,如何在 MyView::mouseMoveEvent() 中调用 QGraphicsView::dragMoveEvent()?
-
你为什么要在
MyView::mouseMoveEvent()里面调用QGraphicsView::dragMoveEvent? -
鼠标移动时需要 1).没有按下左键:检测悬停事件,以便我可以获取鼠标位置的像素值,2)。按下左键:将其视为拖动事件以充当 setDragMode(QGraphicsView::ScrollHandDrag)
-
如果您将拖动模式设置为
QGraphicsView::ScrollHandDrag,则在拖动过程中不应激活悬停事件。只要你从自己的mouseMoveEvent函数调用QGraphicsView::mouseMoveEvent就可以了。
标签: qt drag mousemove qgraphicsview