日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT 实现鼠标拖动(drag)和放下(drop)代码(图形操作四)

發布時間:2024/3/24 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT 实现鼠标拖动(drag)和放下(drop)代码(图形操作四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?拖動的對象:

#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

?鼠標按住把左側拖動到右側:

?放下后把名字改掉:

總結

以上是生活随笔為你收集整理的QT 实现鼠标拖动(drag)和放下(drop)代码(图形操作四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。