QT 实现鼠标拖动(drag)和放下(drop)代码(图形操作四)
生活随笔
收集整理的這篇文章主要介紹了
QT 实现鼠标拖动(drag)和放下(drop)代码(图形操作四)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?拖動的對象:
#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_OBJECTpublic: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?鼠標(biāo)按住把左側(cè)拖動到右側(cè):
?放下后把名字改掉:
總結(jié)
以上是生活随笔為你收集整理的QT 实现鼠标拖动(drag)和放下(drop)代码(图形操作四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在线提取视频中的字幕(亲测有效)
- 下一篇: OSAL之时间管理,软件定时器链表管理