Qt拖放 - 拖动时更改图像显示

Kon*_*ong 7 c++ qt drag-and-drop qt4

我开始拖累图像.

QDrag* drag = new(QDrag)(this);
drag->setPixmap(*pixmap);
drag->exec(Qt::CopyAction | Qt::MoveAction);
Run Code Online (Sandbox Code Playgroud)

当我的拖动到达窗口小部件中的某个点时,我想更改图像显示.

目前我有个主意.在我开始第一次拖动后,当我的拖动到达某个点时,我取消第一次拖动,然后我重新启动一个带有新图像的新拖动.

我这样做了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();
}
Run Code Online (Sandbox Code Playgroud)

change_pixmap_restart_drag功能只是开始拖动.

ale*_*sdm 6

根据Qt的文档,一旦拖动开始,你就无法改变像素图.

Qt使用:

  • 在X11上跟随鼠标的无框窗口.像素图被绘制在窗口小部件上,setGrabMouse用于接收鼠标事件,因为窗口小部件不是直接在鼠标下面.
  • SetCursor Windows上的函数,带有像素图的副本,其中每个动作的光标都在角落中绘制.
  • SetDragImageWithCGImage Mac上的函数,但需要一个DragRefqdnd_mac.mm中声明为无法访问的局部变量的对象.

您可以尝试在所有平台上使用X11方法,或者SetCursor只在计划在Windows上部署应用程序时使用.