Qt5.7| C/C++ 超级简单一学就会的仿QQ宠物

原创 2017年08月29日 17:13:50

功能及其简单,代码行数列不过100行,下面看看运行结果



程序原理:

①窗口置顶,去标题栏和边框;

②重写鼠标事件(鼠标左键、右击、拖动坐标换算);

③播放gif文件;

下面是.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QMouseEvent>
#include <QMovie>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    virtual void mouseMoveEvent(QMouseEvent *event);
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);

private:
    Ui::Widget *ui;

    QPixmap m_MainWidgetImage;
    bool m_dragging;	//是否正在拖动
    QPoint m_startPosition; //拖动开始前的鼠标位置
    QPoint m_framePosition;	//窗体的原始位置

};

#endif // WIDGET_H


.cpp文件:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //gif动态标签(有钱)
    setWindowTitle("山寨宠物");
    QMovie *MyPetMovie = new QMovie(":/timg.gif");
    ui->MyPetlabel->setMovie(MyPetMovie);

    setWindowFlags(Qt::Window|Qt::FramelessWindowHint);
    setAttribute(Qt::WA_TranslucentBackground);
    setWindowFlags(Qt::FramelessWindowHint |Qt::WindowStaysOnTopHint);

    MyPetMovie->start();
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons()&Qt::LeftButton)
    {
        if (m_dragging)
        {
            //delta 相对偏移量
            QPoint delta = event->globalPos() - m_startPosition;
            //新位置:窗体原始位置+偏移量
            move(m_framePosition + delta);
        }
    }
    QWidget::mouseMoveEvent(event);
}

void Widget::mousePressEvent(QMouseEvent *event)
{
    //响应左键
    if (event->button() == Qt::LeftButton)
    {
        m_dragging = true;
        m_startPosition = event->globalPos();
        m_framePosition = frameGeometry().topLeft();
    }
    QWidget::mousePressEvent(event);
}

void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    m_dragging = false;
    QWidget::mouseReleaseEvent(event);
}

Widget::~Widget()
{
    delete ui;
}

为了方便学习,我把整个工程全部打包了,有需要的读者可以下载,下载地址如下:

http://download.csdn.net/download/qq78442761/9955784

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

EntityFramework——Map之初露锋芒(一)

在这里只是粗略的介绍了一下EF的基本知识,至于它如何创建这里就不在细说(网上的方法很全)。总的来说,EF作为一种ORM框架,给我们带来了很大的方便,使我们不仅可以解决的业务问题的实体、关系和逻辑构建模...

大四课程设计之基于RFID技术的考勤管理系统(一)项目介绍

大四课程设计之基于RFID技术的考勤管理系统(一)项目介绍

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

浅谈MVC架构—你到底有什么本事

MVC的处理过程:首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理。然后模型根据用户请求进行相应的业务逻辑处理,并返回数据。最后控制器调用相应的视图格式化模型返回的数据,并通过视图呈现给用户...

android之超级简单的下拉回弹--仿QQ个人主页

先看效果: 效果不错吧!进入主题之前,先了解ImageView的scaleType的center_crop,网络上说的已经很清楚了 : 以下抄自网络: android:scaleType=”ce...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)