我开始拖拽图像。
QDrag* drag = new(QDrag)(this);
drag->setPixmap(*pixmap);
drag->exec(Qt::CopyAction | Qt::MoveAction);
当我的拖动到达小部件中的某个点时,我想更改图像显示。
目前我有一个想法。在我开始第一次拖动后,当我的拖动到达某个点时,我取消第一次拖动,然后使用新图像重新开始拖动。
我在
dragMoveEvent
中执行此操作.我可以用新图像开始新的拖动。但是我似乎无法取消第一次拖动。我发现之前的拖/放操作仍在执行。任何人都可以建议:
if (event->mimeData()->hasText())
{
if (need_to_change_pixmap())
{
event->setDropAction(Qt::IgnoreAction);
change_pixmap_restart_drag();
}
else
{
event->setDropAction(Qt::MoveAction);
event->accept();
}
}
else
{
event->ignore();
}
change_pixmap_restart_drag
功能只是开始拖动。
最佳答案
根据 Qt's documentation ,一旦拖动开始,您就无法更改像素图。
Qt 使用:
setGrabMouse
用于接收鼠标事件,因为小部件不在鼠标的正下方。 SetCursor
在 Windows 上 ,带有像素图的拷贝,其中每个 Action 的光标已绘制在角落。 SetDragImageWithCGImage
在 Mac 上 ,但需要一个 DragRef
在 qdnd_mac.mm 中声明为不可访问的局部变量的对象。 您可以尝试在所有平台上使用 X11 方法,或者使用
SetCursor
如果您只打算在 Windows 上部署您的应用程序。
关于c++ - Qt 拖放 - 拖动时更改图像显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7737913/