尽管已经调用了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";
}
我想念什么?我已经苦苦挣扎了几天...预先感谢。
答案 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
。