• 大小: 12KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: 其他
  • 标签: QT  拖拉功能  

资源简介

基于Qt软件实现,从左边窗口选择图片,然后拖拉到右边窗口进行图片得自由拼接。类似与Visio画流程图得简单设计

资源截图

代码片段和文件信息

#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);
    }
}



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);   //不点击的样式
}


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);
}

QRect

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-03-14 16:27  tryPuzzel\
     文件        2772  2017-11-30 21:49  tryPuzzel\boat.png
     文件        2963  2017-11-30 21:49  tryPuzzel\car.png
     文件        4476  2018-03-14 16:27  tryPuzzel\imageitem.cpp
     文件        1961  2018-03-14 14:50  tryPuzzel\imageitem.h
     文件         122  2018-03-14 13:45  tryPuzzel\images.qrc
     文件        1517  2018-03-14 14:50  tryPuzzel\main.cpp
     文件         225  2018-03-14 13:47  tryPuzzel\tryPuzzel.pro
     文件       23852  2018-03-14 16:27  tryPuzzel\tryPuzzel.pro.user

评论

共有 条评论