• 大小: 712KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签: Qt  

资源简介

使用QGraphicsView和QGraphicsScene实现的一个拼图游戏DEMO,演示了Qt 图形视图框架的应用。

资源截图

代码片段和文件信息

#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() < QApplication::startDragDistance()) {
        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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       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


评论

共有 条评论