我正在开发一个具有多个窗口的Qt应用程序,并希望为程序中的某些元素实现跨窗口拖放功能。为此,我将事件过滤器附加到要拖动的QML元素上,并监听MousePress/MouseMove事件以启动拖动过程,具体操作如下:
这很好运行,但现在我想在拖动时显示一个小工具提示(作为
然而,在拖动元素时,我既没有在
我知道
是否有一种在
QDrag *drag = new QDrag(quickItem);
QMimeData* mimeData = new QMimeData();
mimeData->setText("Test");
drag->setHotSpot(QPoint(0, 0));
drag->setMimeData(mimeData);
drag->exec();
这很好运行,但现在我想在拖动时显示一个小工具提示(作为
QWidget
),跟随鼠标光标并根据鼠标当前停留的元素显示短文本(类似于在Windows资源管理器中拖动文件时出现的“复制到…”或“移动到…”标签)。然而,在拖动元素时,我既没有在
QDrag
对象上,也没有在quickItem
本身上收到任何MouseMove事件,这使得无法跟踪鼠标位置。由于在拖动过程中鼠标被抓住,因此Qt应该有一些事件能够频繁报告鼠标位置,无论鼠标在屏幕的什么位置。我知道
QDrag::setPixmap
方法,但是这不允许我在拖动过程中更改我的工具提示文本,并且存在其他我想避免的限制。是否有一种在
QDrag
运行时监听鼠标移动事件的方法,而不使用特定于平台的系统API?
quickItem
中可能会有一个_mousearea_
,你可以在那里获取onMouseXChanged
、onMouseYChanged
吗? - Mohammad Kanan