-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbtnmodel.cpp
92 lines (82 loc) · 1.78 KB
/
btnmodel.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "btnmodel.h"
#include <QDebug>
#include <QDir>
#include <QSysInfo>
BtnModel::BtnModel(QWidget *parent) :
QPushButton(parent)
{
m_status = NORMAL;
m_mousePress = false;
}
/// 获取图标
void BtnModel::getIconPath(const QString& iconPath)
{
m_mapVec.append(QPixmap(iconPath + QString ("_normal")));
m_mapVec.append(QPixmap(iconPath + QString ("_hover")));
m_mapVec.append(QPixmap(iconPath + QString ("_press")));
this->setFixedSize(m_mapVec[0].size());//设置按钮与图片一样的大小
}
/// 滑入
void BtnModel::enterEvent(QEvent *)
{
m_status = HOVER;
update();
}
/// 滑出
void BtnModel::leaveEvent(QEvent *)
{
m_status = NORMAL;
update();
}
/// 点击
void BtnModel::mousePressEvent(QMouseEvent *event)
{
/// 若点击鼠标左键
if (event->button() == Qt::LeftButton)
{
m_mousePress = true;
m_status = PRESS;
update();
}
}
/// 点击后的放手
void BtnModel::mouseReleaseEvent(QMouseEvent *event)
{
/// 若点击鼠标左键响应
if (m_mousePress && this->rect().contains(event->pos()))
{
m_mousePress = false;
m_status = HOVER;
update();
emit clicked();
}
}
/// 显示效果
void BtnModel::paintEvent(QPaintEvent *)
{
QPainter painter (this);
QPixmap pixmap;
switch(m_status)
{
case NORMAL: /// 正常
{
pixmap = m_mapVec[0];
break;
}
case HOVER: /// 滑过
{
pixmap = m_mapVec[1];
break;
}
case PRESS: /// 点击
{
pixmap = m_mapVec[2];
break;
}
default:
pixmap = m_mapVec[0];
break;
}
/// 显示当前图标
painter.drawPixmap(rect(), pixmap);
}