• 4053阅读
  • 1回复

[提问]关于QLabel的拖拽问题。 [复制链接]

上一主题 下一主题
离线yaloml
 

只看楼主 倒序阅读 楼主  发表于: 2011-10-23
我想实现对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代码可以怎么写呢?
离线jorneyr

只看该作者 1楼 发表于: 2011-10-23
继承QLabel,把这些功能放在他的事件处理函数里
eventFilter只是针对安装过eventFilter的widget,新创建的widget必须再次注册此事件过滤器才行
快速回复
限100 字节
 
上一个 下一个