gpt4 book ai didi

c++ - Qt 拖放在窗口中工作。我可以做到这样我只能放入 Qlabel 而不是整个窗口吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:35:43 34 4
gpt4 key购买 nike

使用 Qt 创建接受文件拖放的应用程序。我的 UI 上有一个区域,我想使用 Qlabel 将文件放入其中。我有将文件拖放到 UI 工作的功能,但是我可以将它放在窗口的任何位置,而不仅仅是 Qlabel 区域。

我想用

ui->label_drag->setAcceptDrops(true);

会起作用,但是这只是一起删除了所有功能。处理这个问题的最佳方法是什么?如果可能的话。

谢谢

最佳答案

最好的方法是覆盖 QLabel 类。在 dragEnterEvent 中一定要调用 acceptProposedAction 来处理移动和离开事件。如果您不这样做,则只会触发 dragEnter 事件。

示例代码如下。要在您的项目中使用它,请将源代码添加到您的项目,然后右键单击窗体上的标签并将该项目提升到 QLabelDragDrop

#ifndef QLABELDRAGDROP_H
#define QLABELDRAGDROP_H

#include <QLabel>

class QLabelDragDrop : public QLabel
{
Q_OBJECT
public:
explicit QLabelDragDrop(QWidget *parent = nullptr);
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dragLeaveEvent(QDragLeaveEvent *event);
void dragMoveEvent(QDragMoveEvent *event);

signals:

public slots:
};

#endif // QLABELDRAGDROP_H
#include "qlabeldragdrop.h"
#include <QDebug>
#include <QDragEnterEvent>
#include <QDropEvent>

QLabelDragDrop::QLabelDragDrop(QWidget *parent) : QLabel(parent)
{
setAcceptDrops(true);
setMouseTracking(true);
}

void QLabelDragDrop::dragEnterEvent(QDragEnterEvent *event)
{
qDebug() << "dragEnterEvent";
event->acceptProposedAction();
}

void QLabelDragDrop::dragLeaveEvent(QDragLeaveEvent *event)
{
qDebug() << "dragLeaveEvent";
releaseMouse();
}

void QLabelDragDrop::dragMoveEvent(QDragMoveEvent *event)
{
qDebug() << "dragMoveEvent";
}

void QLabelDragDrop::dropEvent(QDropEvent *event)
{
qDebug() << "dropEvent";
}

关于c++ - Qt 拖放在窗口中工作。我可以做到这样我只能放入 Qlabel 而不是整个窗口吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56459049/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com