我想实现对QLabel的拖动,并且制定的QLabel响应鼠标双击。
drop event:
void DragWidget::dropEvent(QDropEvent *event)
{
if (event->mimeData()->hasFormat("application/x-dnditemdata")) {
QByteArray itemData = event->mimeData()->data("application/x-dnditemdata");
QDataStream dataStream(&itemData, QIODevice::ReadOnly);
QPixmap pixmap;
QPoint offset;
dataStream >> pixmap >> offset;
QLabel *newIcon = new QLabel(this);
newIcon->setPixmap(pixmap);
newIcon->move(event->pos() - offset);
newIcon->show();
newIcon->setAttribute(Qt::WA_DeleteOnClose);
if (event->source() == this) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->acceptProposedAction();
}
} else {
event->ignore();
}
}
再借由eventFilter来对某个QLabel进行过滤
bool DragWidget::eventFilter(QObject *obj, QEvent *ev)
{
if (obj ==boatIcon) {
if (ev->type() == QEvent::MouseButtonDblClick) {
QMessageBox::information(NULL, QString::fromLocal8Bit("单击"), QString::fromLocal8Bit("单击确定"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
return true;
}
else {
return false;
}
} else
{
return DragWidget::eventFilter(obj, ev);
}
}
但问题来了,过滤的只是最初的那个QLabel,在拖拽动作结束后(drop后),已经新建了一个QLabel,这个过滤也就失效了。
请问还有什么别的解决方法吗??drop代码可以怎么写呢?