-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmedicine.cpp
More file actions
146 lines (132 loc) · 4.84 KB
/
medicine.cpp
File metadata and controls
146 lines (132 loc) · 4.84 KB
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
#include "medicine.h"
#include "ui_medicine.h"
Medicine::Medicine(QWidget *parent) :
QWidget(parent),
ui(new Ui::Medicine)
{
ui->setupUi(this);
//初始化
init();
//固定窗口大小
setFixedSize(230,240);
//设置窗口标题
setWindowTitle("丹药");
//设置窗口图标
setWindowIcon(QIcon(":/ico.ico"));
//listwidget右键菜单
//重要:设置QListWidget的contextMenuPolicy属性,不然不能显示右键菜单
ui->bagList->setProperty("contextMenuPolicy", Qt::CustomContextMenu);
//添加一个菜单
popMenuInListWidget = new QMenu(this);
//使用动作
actionUseInListWidget = new QAction(tr("使用"), this);
//购买动作
actionBuyInListWidget = new QAction(tr("购买"), this);
//把动作添加到菜单里
popMenuInListWidget->addAction(actionUseInListWidget);
popMenuInListWidget->addAction(actionBuyInListWidget);
//为菜单上的Use选项添加响应函数
connect(this->actionUseInListWidget, SIGNAL(triggered()), this, SLOT(onActionUse()));
//为菜单上的Buy选项添加响应函数
connect(this->actionBuyInListWidget, SIGNAL(triggered()), this, SLOT(onActionBuy()));
//绑定右键显示菜单:在单击右键之后会执行槽函数, 槽函数中负责弹出右键菜单
connect(ui->bagList, SIGNAL(customContextMenuRequested(const QPoint &)),this, SLOT(onCustomContextMenuRequested(const QPoint &)));
}
void Medicine::init()
{
//一个配置
QSettings * myConfig = nullptr;
QCoreApplication::applicationDirPath(); //获取可执行文件所在路径
QString configFileName = QCoreApplication::applicationDirPath() + "/Config.ini";
//根据Config.ini路径new QSetting对象
myConfig = new QSettings(configFileName, QSettings::IniFormat);
//读取配置
QString initHunyuan = myConfig->value("bag/hunyuan").toString();
QString initNingqi = myConfig->value("bag/ningqi").toString();
QString initMoney = myConfig->value("bag/money").toString();
//添加库存
//丹药库存
QTreeWidgetItem * hunyuan = new QTreeWidgetItem(QStringList()<< "混元丹" << initHunyuan);
QTreeWidgetItem * ningqi = new QTreeWidgetItem(QStringList()<< "凝气丹" << initNingqi);
ui->bagList->addTopLevelItem(hunyuan);
ui->bagList->addTopLevelItem(ningqi);
//剩余灵石
ui->money->setText(initMoney);
}
Medicine::~Medicine()
{
delete ui;
}
void Medicine::onCustomContextMenuRequested(const QPoint &pos)
{
//弹出右键菜单
popMenuInListWidget->exec(QCursor::pos());
}
//右键菜单使用事件
void Medicine::onActionUse()
{
//获取当前选中的Item
QTreeWidgetItem * item = ui->bagList->currentItem();
//弹出询问对话框
if(QMessageBox::Yes == QMessageBox::question(this, QStringLiteral("使用丹药"),
QStringLiteral("使用1个%1?").arg((item->text(0))), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes))
{
//如果选择Yes
int count = item->text(1).toInt();
qDebug() << "使用前丹药数量:" << count;
if(count < 1)
{
//如果丹药数量为零,弹窗报错
QMessageBox::warning(this, "错误", "没有足够的丹药", QMessageBox::Ok , QMessageBox::Ok);
}
else
{
//减去一个丹药库存
count--;
//int -> QString
QString strCount = QString::number(count);
item->setText(1,strCount);
if(item->text(0) == "混元丹")
{
//向主窗口发送使用丹药的信号
emit hunyuanUsed();
}
else if(item->text(0) == "凝气丹")
{
//向主窗口发送使用丹药的信号
emit ningqiUsed();
}
}
}
}
//右键菜单购买事件
void Medicine::onActionBuy()
{
//获取当前选中的Item
QTreeWidgetItem * item = ui->bagList->currentItem();
//弹出询问对话框
if(QMessageBox::Yes == QMessageBox::question(this, QStringLiteral("购买丹药"),
QStringLiteral("花费100灵石\n购买1个%1?").arg((item->text(0))), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes))
{
//如果选择Yes
//获取购买前数量
int count = item->text(1).toInt();
qDebug() << "购买前丹药数量:" << count;
//获取余额
balance = ui->money->text().toInt();
if(balance >= 100)
{
//余额足够
//扣钱
balance -= 100;
//int -> QString
QString strBalance = QString::number(balance);
ui->money->setText(strBalance);
//增加一个丹药库存
count++;
//int -> QString
QString strCount = QString::number(count);
item->setText(1,strCount);
}
}
}