Commit df933c8a by NitefullWind

1. 新增托盘菜单。

parent f0da09cb
......@@ -8,6 +8,8 @@
#include <QPropertyAnimation>
#include <QEasingCurve>
#include <QStateMachine>
#include <QSystemTrayIcon>
#include <QMenu>
#include <fmp_settings_i.h>
NavWindow::NavWindow(FMPSettingsInterface *&settings, QWidget *parent) :
......@@ -16,15 +18,15 @@ NavWindow::NavWindow(FMPSettingsInterface *&settings, QWidget *parent) :
_btn_group(new QButtonGroup(this)),
_animationShow(new QParallelAnimationGroup(this)),
_stateMachine(new QStateMachine(this)),
_systemTrayIcon(new QSystemTrayIcon(this)),
PI(3.1415926),
_settings(settings)
{
ui->setupUi(this);
ui->navMainBtn->setMovedItem(this);
btns.push_back("payment");
btns.push_back("tool");
btns.push_back("tool");
btns.push_back(std::make_pair("payment", QString::fromLocal8Bit("非码支付")));
btns.push_back(std::make_pair("tool", QString::fromLocal8Bit("设置")));
MenuUiProp.distance = 100;
MenuUiProp.beginAngle = -(PI/2);
......@@ -37,12 +39,15 @@ NavWindow::NavWindow(FMPSettingsInterface *&settings, QWidget *parent) :
connect(_btn_group, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(onMenuBtnClicked(QAbstractButton*)));
initMenu();
initSystemTrayIcon();
}
NavWindow::~NavWindow()
{
delete _btn_group;
actions.clear();
delete _animationShow;
delete _systemTrayIcon;
delete ui;
}
......@@ -73,9 +78,9 @@ void NavWindow::spreadMenus(const bool isSpread)
void NavWindow::initMenu()
{
QState *stateDefault = new QState(_stateMachine);
stateDefault->assignProperty(ui->navMainBtn, "styleSheet", "#navMainBtn{ background-image: url(:fm-icon_01);margin: -26 0 0 -30;}");
stateDefault->assignProperty(ui->navMainBtn, "styleSheet", "#navMainBtn{ background-image: url(:fm-icon_01);margin: -30 0 0 -30;}");
QState *stateSpread = new QState(_stateMachine);
stateSpread->assignProperty(ui->navMainBtn, "styleSheet", "#navMainBtn{ background-image: url(:fm-icon_02);margin: -26 0 0 -30;}");
stateSpread->assignProperty(ui->navMainBtn, "styleSheet", "#navMainBtn{ background-image: url(:fm-icon_02);margin: -30 0 0 -30;}");
stateSpread->addTransition(ui->navMainBtn, &QPushButton::clicked, stateDefault);
stateDefault->addTransition(ui->navMainBtn, &QPushButton::clicked, stateSpread);
......@@ -99,14 +104,21 @@ void NavWindow::initMenu()
bool isUseAnimation = _settings->GetBool(FMP_INIKEY_HOMEANIMATION);
for(decltype(btns.size()) i = 0; i<btns.size(); ++i) {
std::pair<QString, QString> btnPair = btns.at(i);
QAction *action = new QAction(QIcon(QString(":%1").arg(btnPair.first)), btnPair.second, this);
connect(action, &QAction::triggered, this, [=](){
emit menuBtnClicked(btnPair.first);
});
actions << action;
auto btn = new QPushButton(this);
btn->addAction(action);
double angle = MenuUiProp.beginAngle + jianGe*i;
int x = centerX + dis*cos(angle) - btnWidth/2;
int y = centerY + dis*sin(angle) - btnWidth/2;
QRect btnGrometry(x, y, btnWidth, btnWidth);
btn->setObjectName(btns[i]);
btn->setObjectName(btnPair.first);
_btn_group->addButton(btn);
btn->setGeometry(_centerGeometry);
......@@ -132,3 +144,21 @@ void NavWindow::onMenuBtnClicked(QAbstractButton *btn)
QString btnName = btn->objectName();
emit menuBtnClicked(btnName);
}
void NavWindow::initSystemTrayIcon()
{
QIcon icon(":fm-icon_tray");
_systemTrayIcon->setIcon(icon);
_systemTrayIcon->setToolTip(qApp->applicationName());
auto quitAction = new QAction(QString::fromLocal8Bit("退出"), this);
connect(quitAction, &QAction::triggered, this, [&](){
_systemTrayIcon->hide();
emit menuBtnClicked("quit");
});
auto menus = new QMenu(this);
menus->addActions(actions);
menus->addAction(quitAction);
_systemTrayIcon->setContextMenu(menus);
_systemTrayIcon->show();
}
......@@ -15,6 +15,7 @@ class QParallelAnimationGroup;
class QSequentialAnimationGroup;
class FMPSettingsInterface;
class QStateMachine;
class QSystemTrayIcon;
class NavWindow : public QDialog
{
......@@ -43,6 +44,7 @@ private:
Ui::NavWindow *ui;
QButtonGroup* _btn_group;
QList<QAction*> actions;
std::vector<QRect> _btnsGeometry;
QParallelAnimationGroup* _animationShow;
QRect _centerGeometry;
......@@ -50,8 +52,17 @@ private:
void initMenu();
//! System tray icon.
QSystemTrayIcon *_systemTrayIcon;
void initSystemTrayIcon();
private:
std::vector<QString> btns;
/**
* @brief btns
* pair.first: Button的objcetName, icon文件的名字。
* pair.second: 托盘中显示的按钮名字
*/
std::vector<std::pair<QString, QString>> btns;
const double PI;
struct MenuUiProps
{
......
......@@ -15,8 +15,8 @@
</property>
<property name="styleSheet">
<string notr="true">#navMainBtn {
background-image: url(:fm-icon_02);
margin: -26 0 0 -30;
background-image: url(:fm-icon_01);
margin: -30 0 0 -30;
border: none;
}
......@@ -32,9 +32,6 @@ QPushButton:hover {
border-image: url(:tool);
}
#tool:pressed {
border-image: url(:tool);
}
#tool:pressed {
border-image: url(:tool_onclick);
}
#payment {
......@@ -55,8 +52,8 @@ QPushButton:hover {
<rect>
<x>140</x>
<y>90</y>
<width>121</width>
<height>121</height>
<width>124</width>
<height>124</height>
</rect>
</property>
<property name="styleSheet">
......
......@@ -78,6 +78,11 @@ void FMPHomePrivate::onMenuBtnClicked(QString btnName)
Q_Q(FMPHome);
FMP_DEBUG_CTX(q->_ctx) << "Menu clicked: " << btnName;
if(btnName == "quit") {
FMP_DEBUG_CTX(q->_ctx) << "Will Quit!";
return;
}
if(!_isLogined && btnName!="tool") {
if(login() != FMP_SUCCESS) {
return;
......
......@@ -21,6 +21,8 @@ FMPLogin::FMPLogin(QString url, QString storeId, QString partnerId, QDialog *par
connect(ui->numpad, SIGNAL(digit_confirm()), this, SLOT(on_login_btn_clicked()));
connect(qApp, &QApplication::focusChanged, this, &FMPLogin::onFocusChanged);
setAttribute(Qt::WA_QuitOnClose, false);
}
FMPLogin::~FMPLogin()
......
......@@ -10,5 +10,6 @@
<file>img/btn_alert_close.png</file>
<file alias="fm-icon_02">img/fm-icon_02.png</file>
<file alias="tool_onclick">img/fm-icon_tool_onclick.png</file>
<file alias="fm-icon_tray">img/fm-icon_tray.png</file>
</qresource>
</RCC>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment