QListWidget-derived:drop事件未触发

问题描述 投票:1回答:1

从QListWidget派生的小部件是窗口上唯一的小部件。函数“setAcceptDrops(true);”在其构造函数中使用,“event-> accept();”在其“dragEnterEvent”中调用。但是,它的“dropEvent”无法触发。请在github.com/jianz-github/dropevent上查看完整的源代码(使用Qt 5.12.0创建)。

我在Qt Drop event not firing问了一个问题。这种情况应该是相同的,但事实并非如此。奇怪的。

在此先感谢您的帮助。

c++ qt drag-and-drop qt5
1个回答
1
投票

在这种情况下,解决方案是覆盖dragMoveEvent()方法。

listbox.h

#ifndef LISTBOX_H
#define LISTBOX_H

#include <QListWidget>
#include <QDropEvent>
#include <QDragEnterEvent>

class ListBox : public QListWidget
{
public:
    ListBox(QWidget *parent = nullptr);
protected:
    void dropEvent(QDropEvent *event) override;
    void dragEnterEvent(QDragEnterEvent *event) override;
    void dragMoveEvent(QDragMoveEvent *event) override;
};

#endif // LISTBOX_H

listbox.cpp

#include "listbox.h"
#include <QDebug>

ListBox::ListBox(QWidget *parent) : QListWidget (parent)
{
    setAcceptDrops(true);
}
void ListBox::dropEvent(QDropEvent *event)
{
    qDebug() << "dropEvent"<<event;
}
void ListBox::dragEnterEvent(QDragEnterEvent *event)
{
    event->acceptProposedAction();
}
void ListBox::dragMoveEvent(QDragMoveEvent *event)
{
    event->acceptProposedAction();
}
© www.soinside.com 2019 - 2024. All rights reserved.