資源簡(jiǎn)介
使用QGraphicsView和QGraphicsScene實(shí)現(xiàn)的一個(gè)拼圖游戲DEMO,演示了Qt 圖形視圖框架的應(yīng)用。

代碼片段和文件信息
#include?“imageitem.h“
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
PuzzlePartManager::PuzzlePartManager(QGraphicsScene?*scene)
????:?m_scene(scene)
{
}
void?PuzzlePartManager::addSourceItems(int?partId?PuzzleImageItem?*item)
{
????m_sourceItems.insert(partId?item);
}
void?PuzzlePartManager::removeItem(int?partId)
{
????QMap::iterator?it?=?m_sourceItems.find(partId);
????if(it?!=?m_sourceItems.end())
????{
????????PuzzleImageItem?*item?=?it.value();
????????m_sourceItems.remove(partId);
????????m_scene->removeItem(dynamic_cast(item));
????????item->deleteLater();
????}
????if(m_sourceItems.size()?==?0)
????{
????????QGraphicsSimpleTextItem?*info?=?new?QGraphicsSimpleTextItem(“Congratulations!“);
????????info->setPen(QPen(Qt::blue));
????????info->setPos(10?10);
????????QFont?font?=?qApp->font();
????????font.setPointSize(16);
????????info->setFont(font);
????????m_scene->addItem(info);
????}
}
//
//?class?PuzzleImageItem
//
PuzzleImageItem::PuzzleImageItem(const?QString?&?imagePath?int?w
?????????????????????????????????int?h?int?partId)
????:?m_image(imagePath)
?????m_width(w)
?????m_height(h)
?????m_partId(partId)
{
????setCursor(Qt::OpenHandCursor);
????setAcceptedMouseButtons(Qt::LeftButton);
}
QRectF?PuzzleImageItem::boundingRect()?const
{
????return?QRectF(0?0?m_width?m_height);
}
void?PuzzleImageItem::paint(QPainter?*painter?const?QstyleOptionGraphicsItem?*option?QWidget?*widget)
{
????Q_UNUSED(option);
????Q_UNUSED(widget);
????painter->drawImage(0?0?m_image);
}
void?PuzzleImageItem::mousePressEvent(QGraphicsSceneMouseEvent?*event)
{
????setCursor(Qt::ClosedHandCursor);
}
void?PuzzleImageItem::mouseMoveEvent(QGraphicsSceneMouseEvent?*event)
{
????if?(QLineF(event->screenPos()?event->buttonDownScreenPos(Qt::LeftButton))
????????.length()?????????return;
????}
????QDrag?*drag?=?new?QDrag((Qobject*)event->widget());
????QMimeData?*mime?=?new?QMimeData;
????mime->setImageData(m_image);
????mime->setData(QString(QmetaType::typeName(QmetaType::Int))?QString(“%1“).arg(m_partId).toLatin1());
????drag->setMimeData(mime);
????drag->setPixmap(QPixmap::fromImage(m_image));
????drag->setHotSpot(QPoint(15?30));
????drag->exec();
????setCursor(Qt::OpenHandCursor);
}
void?PuzzleImageItem::mouseReleaseEvent(QGraphicsSceneMouseEvent?*event)
{
????setCursor(Qt::OpenHandCursor);
}
//
//?class?PuzzlePart
//
PuzzlePart::PuzzlePart(PuzzlePartManager?*mgr?int?w?int?h?int?partId?QGraphicsItem?*parent)
????:?QGraphicsobject(parent)
?????m_sourcePartManager(mgr)
?????m_width(w)
?????m_height(h)
?????m_partId(partId)
?????m_dragOver(false)
{
????setAcceptDrops(true);
}
QRectF?PuzzleP
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????6050??2016-10-14?06:28??qPuzzle\demo.camproj
?????文件?????905216??2016-10-14?06:27??qPuzzle\demo.camrec
?????文件??????77584??2016-10-14?06:30??qPuzzle\demo.gif
?????文件???????4365??2016-10-13?23:51??qPuzzle\imageitem.cpp
?????文件???????1809??2016-10-13?23:44??qPuzzle\imageitem.h
?????文件????????161??2016-10-13?21:37??qPuzzle\images.qrc
?????文件???????1588??2016-10-13?23:45??qPuzzle\main.cpp
?????文件??????41022??2016-10-12?15:08??qPuzzle\model.png
?????文件???????4609??2016-10-12?15:09??qPuzzle\model_1.png
?????文件???????4934??2016-10-12?15:09??qPuzzle\model_2.png
?????文件????????387??2016-10-13?21:36??qPuzzle\qPuzzle.pro
?????文件??????18652??2016-10-13?23:51??qPuzzle\qPuzzle.pro.user
?????目錄??????????0??2016-10-14?06:32??qPuzzle
-----------?---------??----------?-----??----
??????????????1066377????????????????????13
評(píng)論
共有 條評(píng)論