1 Star 2 Fork 1

yangjianmin999/PVZ-qt

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
card.cpp 2.61 KB
一键复制 编辑 原始数据 按行查看 历史
yjmshl 提交于 2022-11-25 18:51 . shop drag&drop
#include "card.h"
#include <QDebug>
#include <QGraphicsSceneMouseEvent>
#include "shop.h"
#include <QApplication>
#include <QMimeData>
#include <QDrag>
const QVector<QString> Card::name = {"SunFlower","Peashooter","CherryBomb","WallNut",
"SnowPea","PotatoMine","Repeater"};
const QMap<QString,int> Card::map = {{"SunFlower",0},{"PeaShooter",1},{"CherryBomb",2},
{"WallNut",3},{"SnowPea",4},{"PotatoMine",5},
{"Repeater",6}};
const QVector<int> Card::cost = {50,100,150,50,175,25,200};
const QVector<int> Card::cool = {227,227,606,606,227,606,227};
Card::Card(QString s)
{
text=s;
count = 0;
}
QRectF Card::boundingRect() const
{
return QRectF(-50,-30,100,60);
}
void Card::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
painter->scale(0.6,0.58);
painter->drawPixmap(QRect(-50,-70,100,140),QPixmap(":/images/Card.png"));
painter->drawPixmap(QRect(-35,-42,70,70),QPixmap(":/images/"+text+".png"));
QFont font;
font.setPointSize(15);
painter->setFont(font);
painter->drawText(-30,60,QString().sprintf("%3d",cost[map[text]]));
//画冷却时的黑色阴影
if(count < cool[map[text]])
{
QBrush brush(QColor(0,0,0,200));
painter->setBrush(brush);
painter->drawRect(QRectF(-48,-68,98,132*(1-qreal(count)/cool[map[text]])));
}
}
void Card::advance(int phase)
{
qDebug()<<"advance";
if(!phase)
return;
update();
if(count < cool[map[text]])
++count;
}
void Card::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
//判断是否已经过了冷却时间
if(count < cool[map[text]])
{
event->setAccepted(false);
}
//判断阳光数是否可以购买植物
Shop *shop = qgraphicsitem_cast<Shop *>(parentItem());
if(shop->sun < cost[map[text]])
{
event->setAccepted(false);
}
}
void Card::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
//过滤轻微的鼠标抖动
if(QLineF(event->screenPos(),event->buttonDownScreenPos(Qt::LeftButton)).length()
< QApplication::startDragDistance())
{
return;
}
//设置拖动的数据
QMimeData *data = new QMimeData;
data->setText(text);
QImage image(":/images/"+text+".png");
data->setImageData(image);
//执行拖动的效果
QDrag *drag = new QDrag(event->widget());
drag->setMimeData(data);
drag->setPixmap(QPixmap::fromImage(image));
drag->setHotSpot(QPoint(35,35));
drag->exec();
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/yangjianmin999/pvz-qt.git
[email protected]:yangjianmin999/pvz-qt.git
yangjianmin999
pvz-qt
PVZ-qt
master

搜索帮助