Qt设置自定义拖动光标?
如何在执行拖动操作时设置 Qt 中使用的光标?我正在使用 QDrag 类。函数 setCursor 接受一个像素图,无法指定热点,文档也没有指定它可以覆盖“无操作”光标。
如果我可以在 mouseMoveEvent 中执行显式光标,我会很高兴,但我不确定在拖动操作期间如何执行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
检查源代码,Qt 在这方面似乎很蹩脚,并且没有机制可以做到这一点。对于 X11 代码,函数
QDragManager::updateCursor
变量包含它使用的光标。它们是使用带有常量热点值 (0,0) 的QCursor
构造函数创建的。ForbiddenCursor
是完全硬编码的,因此可以防止任何更改。为了设置光标,它调用
QApplication::changeOverrideCursor
。作为静态函数,无法拦截该调用。即使设置了像素图(通过 setCursor),初始拖动光标仍然是默认值。这似乎是 QT 的一个缺陷。 这是在
qdnd_x11.cpp:1948
处,指针光标被强制设置在拖动开始时因此,没有实际的方法可以使用自定义光标进行标准拖动 - n-滴。
Checking the source code it appears Qt is lame in this regards and has no mechanism to do this. For the X11 code the function
QDragManager::updateCursor
variables which contain the cursors it uses. Those are created using theQCursor
constructor with constant hot-spot values (0,0). TheForbiddenCursor
is completely hard-coded, thus preventing any alternation.To set the cursor it calls
QApplication::changeOverrideCursor
. As a static function there is no way to intercept that call.Even if the pixmaps are set (via setCursor) the intial drag cursor is still the default. This just appears to be a defect in QT. This is at
qdnd_x11.cpp:1948
, the pointer cursor is forcibly set at the start of a dragThus there is no actual way to use custom cursors for the standard drag-n-drop.