用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 =