Qt设置自定义拖动光标?

发布于 2024-10-28 04:27:48 字数 154 浏览 4 评论 0 原文

如何在执行拖动操作时设置 Qt 中使用的光标?我正在使用 QDrag 类。函数 setCursor 接受一个像素图,无法指定热点,文档也没有指定它可以覆盖“无操作”光标。

如果我可以在 mouseMoveEvent 中执行显式光标,我会很高兴,但我不确定在拖动操作期间如何执行。

How can I set the cursor used in Qt while performing a drag operation? I am using the QDrag class. The function setCursor takes a pixmap and has no way to specify the hotspot, nor do the docs specify that it could override the "no action" cursor.

I'm happy if I can just do an explicit cursor in mouseMoveEvent but I'm not sure how during a drag operation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

帅气尐潴 2024-11-04 04:27:48

检查源代码,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 the QCursor constructor with constant hot-spot values (0,0). The ForbiddenCursor 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 drag

Thus there is no actual way to use custom cursors for the standard drag-n-drop.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文