Qt Drop事件未触发

时间:2018-12-20 14:43:15

标签: c++ qt drag-and-drop qt5

尽管已经调用了setAcceptDrops,但是不会发生Drop事件。以下代码基于使用Qt 5.12.0创建的窗口小部件项目。添加dropEvent()函数后,cpp文件变为

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug> // added

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setAcceptDrops(true); // added
}

MainWindow::~MainWindow()
{
    delete ui;
}

// added; in .h it is in `protected:' section
void MainWindow::dropEvent(QDropEvent *event)
{
    qDebug() << "dropEvent";
}

我想念什么?我已经苦苦挣扎了几天...预先感谢。

1 个答案:

答案 0 :(得分:1)

您必须覆盖dragEnterEvent方法,该方法允许您按数据类型,源,操作类型进行过滤。在以下示例中,一切都被接受:

*。h

// ...
protected:
    void dropEvent(QDropEvent *event) override;
    void dragEnterEvent(QDragEnterEvent *event) override;
// ...

*。cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setAcceptDrops(true); // added
}

// ...
void MainWindow::dropEvent(QDropEvent *event)
{
    qDebug() << "dropEvent" << event;
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
    event->acceptProposedAction();
}

有关详细信息,我建议您阅读Drag and Drop