資源簡介
基于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()?????????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
- 上一篇:hfss天線增益仿真
- 下一篇:QT之打開文件對話框選擇文件
評論
共有 條評論