c++ - Qt Drop 事件未触发

标签 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";
}

我错过了什么?我已经挣扎了几天...提前致谢。

最佳答案

您必须重写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/

相关文章:

c++ - Qt QNetworkAccessManager总是返回空数据,状态码为0

c++ - 具有大量并发客户端的慢速 QTcpServer

c++ - RegisterHotKey 困惑

c++ - Win32 设备事件 : Not receiving DBT_DEVTYP_VOLUME on DBT_DEVICEARRIVAL event

C++两次传递函数指针导致问题

c++ - Traits 类作为模板模板参数

.net - 拖放示例?

c++ - 比枚举好

iphone - 在 TableView / Collection View 中采用拖放功能在 iPhone 上不起作用

c# - 拖入另一个进程