• 4230阅读
  • 0回复

[提问]QMainWindow 中的 drag 事件为什么执行不成功 ? [复制链接]

上一主题 下一主题
离线firerun
 

只看楼主 倒序阅读 楼主  发表于: 2012-11-24

为了实现在 QMainWindow 中拖拽 QLineEdit (移动),使用了事件过滤
因为当鼠标点在 QLineEdit 上时,QLineEdit 处理了 QMouseEvent ,
QMainWindow 是接受不到 QMouseEvent 的。但是现在在 QMainWindow 中执行
QDrag::exec() 时,都返回 0 , 就是执行不成功。
下面把相关代码贴上来。

  1. MainWindow::MainWindow(QWidget *parent/* = 0*/)
  2. {
  3.     setMouseTracking(true);
  4.     setAcceptDrops(true);
  5.     UrlWidget *url = new UrlWidget(this);
  6.     url->installEventFilter(this);
  7. }
  8. bool MainWindow::eventFilter(QObject *target, QEvent *e)
  9. {
  10.     bool done(false);
  11.     switch (int(e->type()))
  12.     {
  13.     case QEvent::MouseButtonPress:
  14.         mousePressEvent(dynamic_cast<QMouseEvent*>(e));
  15.         done = true;
  16.         break;
  17.     case QEvent::DragEnter:
  18.         done = true;
  19.         break;
  20.     case QEvent::DragLeave:
  21.         done = true;
  22.         break;
  23.     case QEvent::DragMove:
  24.         done = true;
  25.         break;
  26.     case QEvent::Drop:
  27.         done = true;
  28.         break;
  29.     }
  30.     if (done) return true;
  31.     return QMainWindow::eventFilter(target, e);
  32. }
  33. void MainWindow::mousePressEvent(QMouseEvent *e)
  34. {
  35.     if (e->buttons() == Qt::LeftButton)
  36.     {
  37.         QDrag *drag = new QDrag(this);
  38.         QMimeData *mimeData = new QMimeData;
  39.         mimeData->setText("commentEdit->toPlainText()");
  40.         drag->setMimeData(mimeData);
  41.         qDebug() << drag->exec(); // 返回 0 ,不知道怎么解决
  42.     }
  43. }
  44. void MainWindow::dragEnterEvent(QDragEnterEvent *e)
  45. {}
  46. void MainWindow::dragLeaveEvent(QDragLeaveEvent *e)
  47. {}
  48. void MainWindow::dragMoveEvent(QDragMoveEvent *e)
  49. {
  50. }


快速回复
限100 字节
 
上一个 下一个