-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuttongroup.cpp
149 lines (135 loc) · 3.68 KB
/
buttongroup.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include "buttongroup.h"
#include "ui_buttongroup.h"
#include <QToolButton>
#include <QDebug>
#include <QPainter>
#include <QMouseEvent>
ButtonGroup::ButtonGroup(QWidget *parent) :
QWidget(parent),
ui(new Ui::ButtonGroup)
{
ui->setupUi(this);
m_mapper = new QSignalMapper(this);
m_curBtn = ui->myfile;
m_curBtn->setStyleSheet("color:red");
// key:value == 按钮显示内容:按钮指针
m_btns.insert(ui->myfile->text(), ui->myfile);
m_btns.insert(ui->sharelist->text(), ui->sharelist);
m_btns.insert(ui->download->text(), ui->download);
m_btns.insert(ui->transform->text(), ui->transform);
m_btns.insert(ui->switchuser->text(), ui->switchuser);
m_pages.insert(Page::MYFILE, ui->myfile->text());
m_pages.insert(Page::SHARE, ui->sharelist->text());
m_pages.insert(Page::TRANKING, ui->download->text());
m_pages.insert(Page::TRANSFER, ui->transform->text());
m_pages.insert(Page::SWITCHUSR, ui->switchuser->text());
// 设置按钮信号映射
QMap<QString, QToolButton*>::iterator it = m_btns.begin();
for(; it != m_btns.end(); ++it)
{
m_mapper->setMapping(it.value(), it.value()->text());
connect(it.value(), SIGNAL(clicked(bool)), m_mapper, SLOT(map()));
}
connect(m_mapper, SIGNAL(mapped(QString)), this, SLOT(slotButtonClick(QString)));
// 关闭
connect(ui->close, &QToolButton::clicked, [=]()
{
emit closeWindow();
});
// 最大化
connect(ui->max, &QToolButton::clicked, [=]()
{
static bool fl = false;
if(!fl)
{
ui->max->setIcon(QIcon(":/images/title_normal.png"));
}
else
{
ui->max->setIcon(QIcon(":/images/title_max.png"));
}
fl = !fl;
emit maxWindow();
});
// 最小化
connect(ui->min, &QToolButton::clicked, [=]()
{
emit minWindow();
});
}
ButtonGroup::~ButtonGroup()
{
delete ui;
}
// 当前登录用户初始化
void ButtonGroup::changeCurrUser(QString user)
{
ui->login_usr->setText(user);
}
void ButtonGroup::slotButtonClick(Page cur)
{
QString text = m_pages[cur];
slotButtonClick(text);
}
void ButtonGroup::slotButtonClick(QString text)
{
qDebug() << "+++++++++++++++" << text;
QToolButton* btn = m_btns[text];
if(btn == m_curBtn && btn != ui->switchuser)
{
return;
}
m_curBtn->setStyleSheet("color:black");
btn->setStyleSheet("color:red");
m_curBtn = btn;
// 发信号
if(text == ui->myfile->text())
{
emit sigMyFile();
}
else if(text == ui->sharelist->text())
{
emit sigShareList();
}
else if(text == ui->download->text())
{
emit sigDownload();
}
else if(text == ui->transform->text())
{
emit sigTransform();
}
else if(text == ui->switchuser->text())
{
emit sigSwitchUser();
}
}
void ButtonGroup::setParent(QWidget *parent)
{
m_parent = parent;
}
void ButtonGroup::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
QPixmap bk(":/images/title_bk.jpg");
painter.drawPixmap(0, 0, width(), height(), bk);
}
void ButtonGroup::mousePressEvent(QMouseEvent *event)
{
// 如果是左键, 计算窗口左上角, 和当前按钮位置的距离
if(event->button() == Qt::LeftButton)
{
// 计算和窗口左上角的相对位置
m_pos = event->globalPos() - m_parent->geometry().topLeft();
}
}
void ButtonGroup::mouseMoveEvent(QMouseEvent *event)
{
// 移动是持续的状态, 需要使用buttons
if(event->buttons() & Qt::LeftButton)
{
QPoint pos = event->globalPos() - m_pos;
m_parent->move(pos);
}
}