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

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

相关文章推荐

Qt5.7+Opencv2.4.9人脸识别(二)人脸采集

Qt5.7+Opencv2.4.9人脸识别(二)人脸采集

基于PCA和SVM的人脸识别

程序中采用的数据集是ORL人脸库,该人脸库共有400副人脸图像,40人,每人10幅,大小为112*92像素,同一个人的表情,姿势有少许变化。 程序的流程主要分为三部分,数据的预处理(PCA降...

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

先看效果: 效果不错吧!进入主题之前,先了解ImageView的scaleType的center_crop,网络上说的已经很清楚了 : 以下抄自网络: android:scaleType=”ce...
  • zhongwn
  • zhongwn
  • 2017年02月27日 19:45
  • 1404

国家超级计算天津中心简单操作命令(运行C,C++文件常用命令)

一个核可同时计算12个程序(不知道说的准不准确,可能是他那边规定的吧,反正实验室一直是12个)1.首先登录 http://www.nscc-tj.gov.cn/ 右上角,选择登陆VPN入口,我选择的是...

Android自定义ListView,轻松实现上下拉刷新,一看就懂,一学就会,超简单。

之前用别人的ListView,总是不能满足项目需求,故此特意研究一下自定义listview,和大家分享一下 ,简单易懂。...

Linux下 跟我一起学makefile,非常简单,一学就会。

第一步,先创建5个文件 main.c, mytool1.h, mytool1.c, mytool2.h, mytool2.c //---------mytool1.h--------- #ifnde...

Linux下, Eclipse C/C++ IDE下编辑好C/C++源程序之后要先保存!!!否则,就会……

注意:Linux下, Eclipse C/C++ IDE下编辑好C/C++源程序之后要先保存!!!否则,就会……   看看下面的过程:   1、单击File/New,选C Project(或C++ P...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt5.7| C/C++ 超级简单一学就会的仿QQ宠物
举报原因:
原因补充:

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