接受拖放事件的是Qwidget
时间: 2024-04-07 19:33:48 浏览: 92
如果你想将图片拖放到`QWidget`中而不是`QLabel`,你可以按照以下步骤进行操作:
首先,创建一个带有拖放事件的自定义`QWidget`类,命名为`DraggableWidget`。
DraggableWidget.h:
```cpp
#ifndef DRAGGABLEWIDGET_H
#define DRAGGABLEWIDGET_H
#include <QWidget>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMimeData>
class DraggableWidget : public QWidget
{
Q_OBJECT
public:
explicit DraggableWidget(QWidget *parent = nullptr);
protected:
void dragEnterEvent(QDragEnterEvent* event) override;
void dropEvent(QDropEvent* event) override;
};
#endif // DRAGGABLEWIDGET_H
```
DraggableWidget.cpp:
```cpp
#include "DraggableWidget.h"
DraggableWidget::DraggableWidget(QWidget *parent) : QWidget(parent)
{
setAcceptDrops(true);
}
void DraggableWidget::dragEnterEvent(QDragEnterEvent* event)
{
if (event->mimeData()->hasImage())
event->acceptProposedAction();
}
void DraggableWidget::dropEvent(QDropEvent* event)
{
if (event->mimeData()->hasImage()) {
const QPixmap pixmap = qvariant_cast<QPixmap>(event->mimeData()->imageData());
QLabel* label = new QLabel(this);
label->setPixmap(pixmap);
label->setScaledContents(true);
label->move(event->pos() - QPoint(label->width() / 2, label->height() / 2));
label->show();
event->acceptProposedAction();
}
}
```
接下来,在你的主窗口类(例如`MainWindow`)中,创建一个实例化`DraggableWidget`的对象,并将其设置为`centralWidget`。
mainwindow.h:
```cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWidget>
#include <QLabel>
#include "DraggableWidget.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
DraggableWidget* centralWidget;
};
#endif // MAINWINDOW_H
```
mainwindow.cpp:
```cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
centralWidget = new DraggableWidget(this);
setCentralWidget(centralWidget);
}
MainWindow::~MainWindow()
{
}
```
现在,你可以将图片拖放到`DraggableWidget`中,并在拖放过程中显示图片。记得将上述代码编译运行后,可以直接拖放图片到`DraggableWidget`中。
阅读全文