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

标签 c++ qt qt4 drag-and-drop

我开始拖拽图像。

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 使用:

  • 一个跟随鼠标的无框窗口在 X11 .像素图绘制在小部件上,setGrabMouse用于接收鼠标事件,因为小部件不在鼠标的正下方。
  • 函数SetCursor 在 Windows 上 ,带有像素图的拷贝,其中每个 Action 的光标已绘制在角落。
  • 函数SetDragImageWithCGImage 在 Mac 上 ,但需要一个 DragRef在 qdnd_mac.mm 中声明为不可访问的局部变量的对象。

  • 您可以尝试在所有平台上使用 X11 方法,或者使用 SetCursor如果您只打算在 Windows 上部署您的应用程序。

    关于c++ - Qt 拖放 - 拖动时更改图像显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7737913/

    相关文章:

    c++ - Qt - QFileSystemModel 如何获取文件夹中的文件(菜鸟)

    android - 在 Qt Android 项目中使用 OpenCV 时的链接顺序

    QT http 设置用户代理

    qt4 - PyQt : translate module strings at runtime

    c++ - 围绕整数 getter 和 setter 的关键部分是否多余?

    c++ - 如果包含的类型是可平凡复制的类型,则 std::optional 是否会是可平凡复制的类型

    c++ - async_connect() 超时,多个线程执行 io_service.run()

    c++ - OpenCV:如何获取每个轮廓的边界框?

    c++ - 有和没有事件循环的线程之间的区别

    c++ - 显示事件后的 Qt4 qwidget