Как изменить курсор при перетаскивании в Qt? - PullRequest
1 голос
/ 17 апреля 2020

У меня есть виджет, который принимает падение. Объект, который перетаскивается в этом примере, может быть любым PDF или текстовым файлом. Требование заключается в том, что когда перетаскиваемый объект попадает внутрь моего виджета, курсор должен быть изменен на другую форму. Я провел поиск здесь, и есть способ сделать это setDragCursor, но эта функция имеет значение QDrag. Я не создавал перетаскиваемый виджет самостоятельно и из dropEnterEvent и dropMoveEvent я не знаю, как изменить курсор.

DragWidget.h

#ifndef DRAGWIDGET_H
#define DRAGWIDGET_H

#include <QFrame>
#include <QDragEnterEvent>
#include <QDragMoveEvent>

class DragWidget : public QFrame
{
public:
    DragWidget(QWidget *parent = nullptr);

protected:
    void dragEnterEvent(QDragEnterEvent *event) override;
    void dragMoveEvent(QDragMoveEvent *event) override;
};

#endif // DRAGWIDGET_H

DragWidget. cpp

#include "dragwidget.h"
#include <QMimeData>
#include <QDebug>

DragWidget::DragWidget(QWidget *parent) : QFrame(parent)
{
    setMinimumSize(300, 300);
    setFrameStyle(QFrame::Sunken | QFrame::StyledPanel);
    setAcceptDrops(true);
}

void DragWidget::dragEnterEvent(QDragEnterEvent *event)
{
    const QMimeData *mimeData = event->mimeData();
    if ( mimeData->hasText() || mimeData->hasFormat( "application/json" ) )
    {
        qDebug()<<mimeData->text();
    }
}

void DragWidget::dragMoveEvent(QDragMoveEvent *event)
{
    event->acceptProposedAction();
}

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "dragwidget.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    DragWidget *m_dragWidget=nullptr;
};
#endif // MAINWINDOW_H

MainWindow. cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_dragWidget = new DragWidget(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

При использовании приведенного выше кода курсор курсора мыши не меняется enter image description here

Ребята, у вас есть идеи по этому поводу?

...