QT下降事件不发射

Qt Drop event not firing

本文关键字:发射 事件 QT      更新时间:2023-10-16

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。