zoukankan      html  css  js  c++  java
  • 图片拖动并交换图片

    Hero.h

    #ifndef HERO_H
    #define HERO_H
    
    #include <QToolButton>
    #include <QMouseEvent>
    
    class Hero : public QToolButton
    {
        Q_OBJECT
    public:
        explicit Hero(QWidget *parent = nullptr);
    
        ~Hero();
    
    public:
        void setImage(const QString&);
    
    
    protected:
        void mousePressEvent(QMouseEvent *event);
        void mouseMoveEvent(QMouseEvent *event);
        void mouseReleaseEvent(QMouseEvent *event);
    
    
    private:
        QPoint m_pressPoint;//鼠标按下的位置
        QPoint m_pressPointUI;//鼠标按下时控价的位置
    
    };
    
    #endif // HERO_H
    #include "Hero.h"
    #include "mainwindow.h"
    #include <QDebug>
    
    Hero::Hero(QWidget *parent) : QToolButton(parent)
    {
        m_pressPointUI = this->pos();
    }
    
    Hero::~Hero()
    {
    
    }
    
    void Hero::setImage(const QString& s_image)
    {
    //    QImage image(s_image);
    //    int w = image.width();
    //    int h = image.height();
        int w = 80;
        int h = 80;
        this->setFixedSize(w,h);
        this->setIconSize(QSize(w,h));
        this->setIcon(QIcon(s_image));
    }
    
    void Hero::mousePressEvent(QMouseEvent *event)
    {
        m_pressPoint = event->pos();
    
        m_pressPointUI = this->pos();
    
    
        this->raise();
    
    }
    
    void Hero::mouseMoveEvent(QMouseEvent *event)
    {
        QPoint dis = event->pos() - m_pressPoint;
        this->move(this->pos() + dis);
    
    }
    
    void Hero::mouseReleaseEvent(QMouseEvent *event)
    {
        for (int i =0;i<MainWindow::mHero.size();i++)
        {
            if (MainWindow::mHero[i]->geometry().contains(this->pos() + event->pos()) && this != MainWindow::mHero[i])
            {
                //交换图片
                QIcon icon = this->icon();
                this->setIcon(MainWindow::mHero[i]->icon());
                MainWindow::mHero[i]->setIcon(icon);
            }
    
        }
    
        this->move(m_pressPointUI);
    
    }

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include "Hero.h"
    #include <QMainWindow>
    #include <QVector>
    
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
        void init();
    
    public:
        static QVector<Hero*> mHero;
    
    
    
    private:
        Ui::MainWindow *ui;
    };
    #endif // MAINWINDOW_H
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    
    QVector<Hero*> MainWindow::mHero;
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        init();
    }
    
    MainWindow::~MainWindow()
    {
    //    for (auto p : mHero)
    //    {
    //        delete  p;
    //        p = nullptr;
    //    }
    
    //    mHero.clear();
    
        delete ui;
    }
    
    void MainWindow::init()
    {
    
        Hero* p1 = new Hero(this);
        p1->setImage("D:/ss/s3/untitled/image/h1.jpeg");
        p1->move(0,0);
    
        Hero* p2 = new Hero(this);
        p2->setImage("D:/ss/s3/untitled/image/h2.jpeg");
        p2->move(410,0);
    
        Hero* p3 = new Hero(this);
        p3->setImage("D:/ss/s3/untitled/image/h3.jpeg");
        p3->move(0,410);
    
        Hero* p4 = new Hero(this);
        p4->setImage("D:/ss/s3/untitled/image/h4.jpeg");
        p4->move(410,410);
    
        mHero.append(p1);
        mHero.append(p2);
        mHero.append(p3);
        mHero.append(p4);
    }
  • 相关阅读:
    RSA
    antd 规则检查
    antd 使用总结问题
    react context prop-types
    【CSS/JS】如何实现单行/多行文本溢出的省略(...)
    react prop-types
    js 监听URL的hash变化
    Spark 读取Hadoop集群文件
    HIVE 常见函数
    Linux ANSI转 UTF8
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/14899524.html
Copyright © 2011-2022 走看看