Событие Qt Drop не запускается - PullRequest
0 голосов
/ 20 декабря 2018

Событие удаления не произойдет, хотя вызывается `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";
}

Чего мне не хватает?Я боролся в течение нескольких дней ... Заранее спасибо.

1 Ответ

0 голосов
/ 20 декабря 2018

Необходимо перезаписать метод dragEnterEvent, который позволяет фильтровать по типу данных, по источнику, по типу действия.В следующем примере все принимается:

*. Ч

// ...
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.

...