效果预览

代码链接:https://download.youkuaiyun.com/download/ASCE_Python/12146370
本例子实现拖拽一个label效果,主要是四个函数的定义实现,Drag前要记录原来的数据存入到MimeData中,比如这里的图片和控件初始位置,Drop时要读出原来存储的数据并根据该数据还原为最初的模样
在头文件中声明事件操作函数,MainWindow.h中如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
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;
protected:
void mousePressEvent(QMouseEvent *event);
void dragEnterEvent(QDragEnterEvent *event);
void dragMoveEvent(QDragMoveEvent *event);
void dropEvent(QDropEvent *event);
};
#endif // MAINWINDOW_H
在cpp中重写事件函数的实现部分,MainWindow.cpp如下:
#include "MainWindow.h"
#include "ui_MainWindow.h"
//增加相关头文件
#include <QLabel>
#include <QMouseEvent>
#include <QDragEnterEvent>
#include <QDragMoveEvent>
#include <QDropEvent>
#include <QPainter>
#include <QUrl>
#include <QFile>
#include <QTextStream>
#include <QMimeData>
#<

本文详细介绍了如何在Qt中实现控件的拖拽功能,通过重写事件函数,包括鼠标按下、拖拽进入、拖拽移动和放下事件,实现了一个label的拖拽效果。文章提供了完整的代码示例,展示了如何使用QMimeData存储和读取数据,以及如何创建QDrag对象进行数据的移动。
最低0.47元/天 解锁文章

3270





