用Qt图形视图框架开发拼图游戏

本文介绍了一个使用Qt的图形视图框架开发的拼图游戏DEMO,涉及QGraphicsView、QGraphicsScene、QGraphicsItem、drag & drop等技术。详细讲解了PuzzleImageItem和PuzzlePartItem的实现,包括鼠标事件处理和拖放操作。通过QMimeData传递数据,实现碎片的正确放置。
摘要由CSDN通过智能技术生成

用Qt的图形视图框架(Graphics View Framework)做了一个拼图游戏DEMO,演示了:

  • QGraphicsView、QGraphicsScene、QGraphicsItem的基本用法
  • drag && drop
  • 自定义QGraphicsItem

先来看看效果吧:

现在,来看下代码了。

项目说明

如上图所示,项目名称为qPuzzle,三个源文件,main.cpp是入口,imageitem.h和imageitem.cpp实现了:

  • PuzzleImageItem,就是界面左上侧那两个可以拖动的碎片,支持拖动
  • PuzzlePart,用于接受拖放的item
  • PuzzlePartManager,管理可拖放的PuzzleImageItem,拖放到位后从QGraphicsScene中移除PuzzleImageItem

项目还有几个图片资源,model.png是带有拼图区域的房子图片,mode_1.png和model_2.png是房子上扣出来的小图片。

源码说明

分开来说吧,main()、PuzzleImageItem和PuzzlePartItem。

入口函数main

先看main.cpp吧:

class GraphicsView : public QGraphicsView
{
public:
    GraphicsView(QGraphicsScene *scene) : QGraphicsView(scene)
    {
    }

protected:
    virtual void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE
    {
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QGraphicsScene scene(0, 0, 480, 360);
    PuzzleImageItem *image1 = new PuzzleImageItem(":/model_1.png", 60, 60, 1);
    image1->setPos(4, 4);
    scene.addItem(image1);
    PuzzleImageItem *image2 = new PuzzleImageItem(":/model_2.png", 60, 60, 2);
    image2->setPos(4, 70);
    scene.addItem(image2);

    QGraphicsPixmapItem *model = 
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

foruok

你可以选择打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值