为了实现在 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)
- {
- }