考虑在Qt中处理drop事件的典型方法,其中我的小部件检查drop事件中包含的mime数据,然后相应地采取行动:
void MyWidget::dropEvent(QDropEvent *event)
{
// check if the event mime data is the kind this widget can process
if(event->mimeData()->hasUrls()) {
event->acceptProposedAction();
const QMimeData* mData = event->mimeData();
// process data...
}
}
假设MyWidget
是一些虚拟UI元素,我真的不希望它包含太多逻辑。我想验证事件,然后将mime数据转发给负责实际处理逻辑的另一个类似控制器的对象。
我发现这个问题比预期的更多有问题。
谁拥有QMimeData
对象的所有权? QDropEvent
?如果是,那么什么时候删除了事件? QDropEvent
可能计划由Qt删除,因此必须将mime数据的生命周期限制为dropEvent()
方法。
那么,我可以只制作一个mime数据的副本并传递它。但不幸的是QMimeData
没有复制构造函数或赋值....
到目前为止我做得对吗? 我该如何处理这种情况? 我试图在这里与框架作斗争还是有一种规范的方法来实现这个目标?