Qt/C++ 360安全卫士主界面动态按钮demo

原创 2016年05月31日 01:44:38

一,先上最终效果图

                                                                   

 由于制不来gif就只能传个hover状态的了,所以看不出实际效果了

                                 

二,主要代码:

      1.头文件

 #include<QObject>

#include <QWidget>
#include<QPaintEvent>
#include<QEvent>
#include<QPushButton>
#include<qpropertyanimation.h>
#include<QDebug>

class my360button : public QPushButton
{
    Q_OBJECT
public:
    my360button(QPixmap pixnormal,QPixmap pixenter,QPixmap pixleave,QWidget*parent);
    ~my360button();
protected:
    void enterEvent(QEvent*);
    void leaveEvent(QEvent*);
    void paintEvent(QPaintEvent*);
    QPropertyAnimation*m_enteranimation;
    QPropertyAnimation*m_leaveanimation;
    QList<QPixmap> m_enterlist;
    QList<QPixmap> m_leavelist;
    QPixmap m_pixnormal;
    int m_enterIndex;
    int m_leaveIndex;
    bool m_enter;
    bool m_leave;
public slots:
    void entervaluechange(QVariant var){m_enterIndex=var.toInt();update();}
    void leavevaluechange(QVariant var){m_leaveIndex=var.toInt();update();qDebug()<<m_leaveIndex;}
};

 .cpp文件


#include"my360button.h"

#include<QPainter>
#include<QDebug>
my360button::my360button(QPixmap pixnormal,QPixmap pixenter,QPixmap pixleave,QWidget*parent):QPushButton(parent)
{
    setCursor(Qt::PointingHandCursor);
    m_leave=false;
    m_enter=true;
    m_leaveIndex=0;
    m_enterIndex=0;
    m_pixnormal=pixnormal;
    for(int i=0;i<10;i++)//进入
    {
        m_enterlist<<pixenter.copy(i*(pixenter.width()/10),0,pixenter.width()/10,pixenter.height());
    }
    for(int j=0;j<8;j++)//离开
    {
        m_leavelist<<pixleave.copy(j*(pixleave.width()/8),0,pixleave.width()/8,pixleave.height());
    }
    m_enteranimation=new QPropertyAnimation(this,"");
    m_enteranimation->setStartValue(0);
    m_enteranimation->setEndValue(9);
    m_enteranimation->setDuration(600);
    connect(m_enteranimation,SIGNAL(valueChanged(QVariant)),this,SLOT(entervaluechange(QVariant)));
    m_leaveanimation=new QPropertyAnimation(this,"");
    m_leaveanimation->setStartValue(0);
    m_leaveanimation->setEndValue(7);
    m_leaveanimation->setDuration(600);
    connect(m_leaveanimation,SIGNAL(valueChanged(QVariant)),this,SLOT(leavevaluechange(QVariant)));
}
my360button::~my360button()
{
    delete m_leaveanimation;
    delete m_enteranimation;
}
void my360button::enterEvent(QEvent *)
{
    m_enter=true;
    m_leave=false;
    m_enteranimation->start();
}
void my360button::leaveEvent(QEvent *)
{
    m_enter=false;
    m_leave=true;
    m_leaveanimation->start();
}
void my360button::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
   if(m_enter)
    painter.drawPixmap(rect(),m_enterlist.at(m_enterIndex));
   if(m_leave)
    painter.drawPixmap(rect(),m_leavelist.at(m_leaveIndex));
}

三,demo下载:http://download.csdn.net/detail/what951006/9535965


powered by 小乌龟在大乌龟背上

更多文章:http://blog.csdn.net/what951006


版权声明:转载请声明出处,谢谢~

相关文章推荐

你真的需要掌握多种编程语言吗?

我刚刚断送了自己的职业生涯,没错,很多人都这样对我说。 同事得知我即将离开公司的消息,大多数对此表示理解。但让他们困惑的是,我目前就职的公司是一家Windows商店,用C#.net编写代码,而我要入...

Qt日记(2)-360新版特性界面实现(2)

1.UI的结构 开始画图形界面,首先确定UI的大小,找到360新版特性界面的皮肤,可以看到: 4个不同的页面的像素为:680 * 370 而最顶层的一层透明页面像素为:680 * 372 如图: QS...
  • gzshun
  • gzshun
  • 2012-05-23 23:52
  • 8107

Qt日记(3)-360新版特性界面实现(3)

1.画关闭按钮 拖动图片的功能放后面说,先把关闭按钮给画出来。 现在很多软件,类似QQ,360,91助手......等等软件,界面上都有很多很漂亮的按钮,当鼠标移上去,按钮变为高亮,当鼠标点击下去,按...
  • gzshun
  • gzshun
  • 2012-06-02 22:09
  • 6113
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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