Qt Drag and Drop - 拖动时更改图像显示
Posted
技术标签:
【中文标题】Qt Drag and Drop - 拖动时更改图像显示【英文标题】:Qt Drag and Drop - Change image display while dragging 【发布时间】:2011-12-05 23:29:24 【问题描述】:我开始用图像拖动。
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
函数只是开始拖动。
【问题讨论】:
【参考方案1】:根据Qt's documentation,一旦开始拖动,您将无法更改像素图。
Qt 使用:
一个跟随鼠标X11的无框窗口。像素图绘制在小部件上,setGrabMouse
用于接收鼠标事件,因为小部件不在鼠标的正下方。
函数SetCursor
在 Windows 上,带有像素图的副本,其中每个操作的光标已绘制在角落。
函数SetDragImageWithCGImage
在Mac上,但需要一个DragRef
对象,该对象在qdnd_mac.mm中声明为不可访问的局部变量。
您可以尝试在所有平台上使用 X11 方法,或者如果您只打算在 Windows 上部署应用程序,则使用 SetCursor
。
【讨论】:
【参考方案2】:来自 QDrag 文档:
void QDrag::setPixmap ( const QPixmap & pixmap ) :
将pixmap
设置为pixmap
,用于表示拖放操作中的数据。只能在拖动开始前设置pixmap
。
所以,我很抱歉,但你不能!
连setDragCursor()
都是没有效果的方法……
【讨论】:
以上是关于Qt Drag and Drop - 拖动时更改图像显示的主要内容,如果未能解决你的问题,请参考以下文章
Qt Drag & Drop:添加对拖动文件到应用程序主窗口的支持
python selenium drag_and_drop()和drag_and_drop_with_offset()怎么使用?