尽管已调用“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";
}
我错过了什么?我已经挣扎了几天...提前致谢。
最佳答案
您必须重写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
.
关于c++ - Qt Drop 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53870847/