drop事件不会发生,尽管``setAcceptdrops''已被调用。以下代码基于使用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
。
我遇到了相同的问题,并找出了导致它的原因。就我而言,这是因为我试图将文件拖到QTEXTEDIT小部件而不是MainWindow上。事实证明,由于拖动和dropevent功能是为mainwindow定义的,而不是qtextedit。