拖动的对象:
#include "outlistitem.h"
#include "ui_outlistitem.h"
OutListItem::OutListItem(QWidget *parent) :
QWidget(parent),
ui(new Ui::OutListItem)
{
ui->setupUi(this);
}
OutListItem::~OutListItem()
{
delete ui;
}
void OutListItem::mousePressEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
drag->setMimeData(mimeData);
Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction);
this->setStyleSheet("background:#000");
}
}
void OutListItem::mouseMoveEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
qDebug()<<"mouseMoveEvent"<<endl;
}
}
void OutListItem::mouseReleaseEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
qDebug()<<"mouseReleaseEvent"<<endl;
}
}
void OutListItem::setLabelTxt(QString str)
{
this->ui->label->setText(str);
}
#ifndef OUTLISTITEM_H
#define OUTLISTITEM_H
#include <QDebug>
#include <QWidget>
#include <QMouseEvent>
#include <QDrag>
#include <QMimeData>
namespace Ui {
class OutListItem;
}
class OutListItem : public QWidget
{
Q_OBJECT
public:
explicit OutListItem(QWidget *parent = nullptr);
~OutListItem();
QString name;
void setLabelTxt(QString str);
void setName(QString str){name = str;}
QString getName(){return name;}
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
private:
Ui::OutListItem *ui;
};
#endif // OUTLISTITEM_H
被拖动的对象放下的位置 对象:
#include "screen.h"
#include <QDebug>
#include <QStyleOption>
#include <QPainter>
#include "screenctr.h"
Screen::Screen(QWidget *parent) : QWidget(parent)
{
this->setCursor(QCursor(Qt::SizeAllCursor));
setAcceptDrops(true);
}
void Screen::mousePressEvent(QMouseEvent *event){
if(event->button()==Qt::LeftButton)
{
}
}
void Screen::mouseReleaseEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
}
}
void Screen::mouseMoveEvent(QMouseEvent *event)
{
}
void Screen::paintEvent(QPaintEvent *event)
{
//自定义的类需要paintEvent来重新绘制背景
Q_UNUSED(event);
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
void Screen::dragEnterEvent(QDragEnterEvent *event)
{
qDebug() << "Screen::dragEnterEvent 111 ";
event->setDropAction(Qt::MoveAction);
event->accept();
}
void Screen::dragMoveEvent(QDragMoveEvent *event)
{
qDebug() << "Screen::dragMoveEvent 222 ";
}
void Screen::dropEvent(QDropEvent *event)
{
qDebug() << "Screen::dropEvent 333 ";
OutListItem* source = qobject_cast<OutListItem*>(event->source());
if(source != NULL)
{
qDebug() << "source name ===- " << source->getName();
this->scrName = source->getName();
QLabel* label = this->findChild<QLabel*>();
qDebug() << "label ===- " << label;
label->setText(source->getName());
}
}
void Screen::dragLeaveEvent(QDragLeaveEvent *event)
{
qDebug() << "Screen::dragLeaveEvent 444 ";
}
#ifndef SCREEN_H
#define SCREEN_H
#include <QWidget>
#include "paintergragh.h"
#include <QLineEdit>
#include <QMouseEvent>
#include <QPoint>
#include <QCursor>
#include <QRect>
#include <QtWidgets/QLabel>
using namespace neb;
class Screen : public QWidget
{
Q_OBJECT
public:
explicit Screen(QWidget *parent = nullptr);
void paintEvent(QPaintEvent *event);
public:
QString scrName;
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void dragEnterEvent(QDragEnterEvent *e);
virtual void dragMoveEvent(QDragMoveEvent *e);//允许子类重写覆盖
virtual void dropEvent(QDropEvent *e);
virtual void dragLeaveEvent(QDragLeaveEvent *e);
};
#endif // SCREEN_H
鼠标按住把左侧拖动到右侧:
放下后把名字改掉: