从 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())
我正在尝试通过拖放创建 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())