为了实现在 QMainWindow 中
拖拽 QLineEdit (移动),使用了
事件过滤。
因为当鼠标点在 QLineEdit 上时,QLineEdit 处理了 QMouseEvent ,
 QMainWindow 是接受不到 QMouseEvent 的。但是现在在 QMainWindow 中
执行 QDrag::exec() 时,都返回 0 , 就是执行不成功。
下面把相关代码贴上来。 
- MainWindow::MainWindow(QWidget *parent/* = 0*/)
 - {
 -     setMouseTracking(true);
 -     setAcceptDrops(true);
 -     UrlWidget *url = new UrlWidget(this);
 -     url->installEventFilter(this);
 - }
 - bool MainWindow::eventFilter(QObject *target, QEvent *e)
 - {
 -     bool done(false);
 -     switch (int(e->type()))
 -     {
 -     case QEvent::MouseButtonPress:
 -         mousePressEvent(dynamic_cast<QMouseEvent*>(e));
 -         done = true;
 -         break;
 -     case QEvent::DragEnter:
 -         done = true;
 -         break;
 -     case QEvent::DragLeave:
 -         done = true;
 -         break;
 -     case QEvent::DragMove:
 -         done = true;
 -         break;
 -     case QEvent::Drop:
 -         done = true;
 -         break;
 -     }
 -     if (done) return true;
 -     return QMainWindow::eventFilter(target, e);
 - }
 - void MainWindow::mousePressEvent(QMouseEvent *e)
 - {
 -     if (e->buttons() == Qt::LeftButton)
 -     {
 -         QDrag *drag = new QDrag(this);
 -         QMimeData *mimeData = new QMimeData;
 -         mimeData->setText("commentEdit->toPlainText()");
 -         drag->setMimeData(mimeData);
 -         qDebug() << drag->exec(); // 返回 0 ,不知道怎么解决
 -     }
 - }
 - void MainWindow::dragEnterEvent(QDragEnterEvent *e)
 - {}
 - void MainWindow::dragLeaveEvent(QDragLeaveEvent *e)
 - {}
 - void MainWindow::dragMoveEvent(QDragMoveEvent *e)
 - {
 - }