从 Qt 中的函数返回 MIME 数据

Returning MIME data from a function in Qt

我正在尝试通过拖放创建 class。我希望它用作将来派生的 classes 的基础 class。我希望派生 classes 为拖放指定 MIME 数据。我做了一个 returns MIME 数据作为指针的函数,我不确定这样做是否安全。会不会造成内存泄露或者其他问题?它现在可以工作并且不显示任何警告。我是 Qt 的新手,对 C++ 中的指针没有太多经验,如果这是一个愚蠢的问题,我很抱歉。

QMimeData* BasicGraphicsObject::setObjectMimeData()
{
    QMimeData *mime = new QMimeData;
    mime->setImageData(itemToImage());
    mime->setText("BasicItem");
    return mime;
}

拖动实现函数:

void BasicGraphicsObject::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    // This prevents mouse jitter noise, drag starts only if distance is sufficient
    if (QLineF(event->screenPos(), event->buttonDownScreenPos(Qt::LeftButton))
            .length() < QApplication::startDragDistance()) {
            return;
        }

    //initialising drag event
    QDrag *drag = new QDrag(event->widget());

    //setting mime data with setObjectMimeData function
    drag->setMimeData(setObjectMimeData());

    //setting cursor as an image of the item being dragged
    drag->setPixmap(itemToImage().scaled(boundingRect().size().toSize()));
    drag->setHotSpot(QPoint(15,20));
    drag->exec();
    setCursor(Qt::OpenHandCursor);
}

QDrag::setMimeData() 的手册页说“QMimeData 对象的所有权转移到 QDrag 对象”,这是 QDrag 对象完成后将删除 QMimeData 对象的另一种说法它。因此,您不应该遇到 QMimeData 对象的任何内存泄漏(除非您以某种方式从不使用它调用 setMimeData())