c++ - 有没有办法检查 QLabel pixmap 是否设置为特定的东西?
问题描述
我正在创建一个 Qt 应用程序,我有一部分可以将 QLabel 从一帧拖到另一帧,我需要知道拖了哪个标签,但我不知道如何检查。有没有功能或方法可以做到这一点?
解决方案
假设您通过覆盖dropEvent(QDropEvent *)
某种类型的 QWidget 的子类中的方法来处理拖放操作,您可以调用QDropEvent::source()来获取指向用户单击以开始拖动的小部件的指针。然后,您可以使用该指针在已知拖动源的指针表/列表中进行查找,或者使用dynamic_cast<QLabel*>()
它来尝试从中获取QLabel
指针,以便您可以QLabel
在其上调用方法等。
请注意,只有在您自己的应用程序中开始拖动操作时,此技术才有效。当然,如果拖动操作来自其他应用程序,它将不起作用,因为在这种情况下,源小部件不在程序的进程空间中,因此无法获得指向它的指针。
一个稍微优雅的替代方法是让源小部件向QMimeData对象添加一些识别数据,然后在QDrag对象上调用setMimeData()之前它调用它上的exec()。然后接收小部件可以查看QDropEvent::mimeData()返回的QMimeData对象以检索该信息。这更好一点,因为它可以跨进程边界工作,并且更安全,因为您没有不相关的小部件相互取消引用指针或尝试向下转换 QObject 指针。
推荐阅读
- javascript - 将数据属性从 Shopify Schema 块传递到 JS
- pandas - Pandas:从最后一行开始,按升序,删除所有满足多列条件的行
- javascript - Iframe 中的 SharedArrayBuffer
- python - 你好,我如何使用opencv从图像中分割白色矩形对象?
- arrays - Postgresql 递归更新 jsonb 键
- javascript - 为不存在的数组元素获取默认值而不是 `undefined`
- java - 打包到 jar 桌面 Spring Boot 项目时出现数据源错误
- python - 从 QGIS 工具栏菜单中删除工具栏
- r - R-Dplyr 在不均匀间隔的数据上移动总和
- java - 在 java 中签署特定 XML 标记时出错