首页 > 解决方案 > 有没有办法检查 QLabel pixmap 是否设置为特定的东西?

问题描述

我正在创建一个 Qt 应用程序,我有一部分可以将 QLabel 从一帧拖到另一帧,我需要知道拖了哪个标签,但我不知道如何检查。有没有功能或方法可以做到这一点?

标签: c++qt

解决方案


假设您通过覆盖dropEvent(QDropEvent *)某种类型的 QWidget 的子类中的方法来处理拖放操作,您可以调用QDropEvent::source()来获取指向用户单击以开始拖动的小部件的指针。然后,您可以使用该指针在已知拖动源的指针表/列表中进行查找,或者使用dynamic_cast<QLabel*>()它来尝试从中获取QLabel指针,以便您可以QLabel在其上调用方法等。

请注意,只有在您自己的应用程序中开始拖动操作时,此技术才有效。当然,如果拖动操作来自其他应用程序,它将不起作用,因为在这种情况下,源小部件不在程序的进程空间中,因此无法获得指向它的指针。

一个稍微优雅的替代方法是让源小部件向QMimeData对象添加一些识别数据,然后在QDrag对象上调用setMimeData()之前它调用它上的exec()。然后接收小部件可以查看QDropEvent::mimeData()返回的QMimeData对象以检索该信息。这更好一点,因为它可以跨进程边界工作,并且更安全,因为您没有不相关的小部件相互取消引用指针或尝试向下转换 QObject 指针。


推荐阅读