#include "DrawItem.h"
#include <QtGui>
#include <QtWidgets/QGraphicsView>
#include <QtWidgets/QGraphicsSceneMouseEvent>
#include <QtWidgets/QStyleOption.h>
//DrawItem::DrawItem()
//{
//}
//
//
//DrawItem::~DrawItem()
//{
//}
const int DEFAULT_HANDLE_RADIUS = 4;
static qreal viewScale(const QGraphicsItem *const item)
{
qreal scale = 1;
if (item->scene())
{
QList<QGraphicsView *> views = item->scene()->views();
if (views.size() > 0)
scale = views[0]->transform().m11();
}
return scale;
}
DrawItem::DrawItem(QGraphicsItem *parent) : QAbstractGraphicsShapeItem(parent)
{
setFlag(ItemIsMovable, true);
setFlag(ItemIsSelectable, true);
setAcceptHoverEvents(true);
setPen(QPen(Qt::red));
m_pressed = false;
// m_nUsgaged = 0;
// m_bResult = false;
// m_strType = "Rect";
m_strUsage = tr("");
}
void DrawItem::mousePressEvent(QGraphicsSceneMouseEvent * event)
{
if (event->button() == Qt::RightButton)
{
return;
}
QString strPos;
bool bSelected = true;
QPointF pos = this->scenePos();
//switch (type())
//{
//case UserType_Rect:
//{
// RectItem *pItem = (RectItem*)this;
// strPos = QString("Pos:(%1 , %2) Size(%3 , %4)").arg(QString::number(pos.x() - pItem->width() / 2)).arg(QString::number(pos.y() - pItem->height() / 2)).arg(QString::number(pItem->width())).arg(QString::number(pItem->height()));
//}
//break;
//case UserType_RotateRect:
//{
// RotateRectItem *pItem = (RotateRectItem*)this;
// strPos = QString("Pos:(%1 , %2) Size:(%3 , %4) Rotate: %5").arg(QString::number(pos.x() - pItem->width() / 2)).arg(QString::number(pos.y() - pItem->height() / 2)).arg(QString::number(pItem->width())).arg(QString::number(pItem->height())).arg(QString::number(pItem->rotation()));
//}
//break;
//case UserType_Ellipse:
//{
// EllipseItem *pItem = (EllipseItem*)this;
// strPos = QString("Pos:(%1 , %2) Size(%3 , %4)").arg(QString::number(pos.x() - pItem->width() / 2)).arg(QString::number(pos.y() - pItem->height() / 2)).arg(QString::number(pItem->width())).arg(QString::number(pItem->height()));
//}
//break;
//case UserType_RotateEllipse:
//{
// RotateEllipseItem *pItem = (RotateEllipseItem*)this;
// strPos = QString("Pos:(%1 , %2) Size:(%3 , %4) Rotate: %5").arg(QString::number(pos.x() - pItem->width() / 2)).arg(QString::number(pos.y() - pItem->height() / 2)).arg(QString::number(pItem->width())).arg(QString::number(pItem->height())).arg(QString::number(pItem->rotation()));
//}
//break;
//case UserType_Polygon:
//{
// //bSelected = false;
// PolygonItem *pItem = (PolygonItem*)this;
// QPolygonF potf = pItem->polygon();
// foreach(QPointF pt, potf)
// {
// pt += pItem->scenePos();
// strPos += QString("(%1 ,%2),").arg(pt.x()).arg(pt.y());
// }
//}
//break;
//case UserType_PolyLine:
//{
// //bSelected = false;
// PolylineItem *pItem = (PolylineItem*)this;
// QPolygonF potf = pItem->polyline();
// foreach(QPointF pt, potf)
// {
// pt += pItem->scenePos();
// strPos += QString("(%1 ,%2),").arg(pt.x()).arg(pt.y());
// }
//}
//break;
//case UserType_Line:
//{
// LineItem *pItem = (LineItem*)this;
// QLineF line = pItem->line();
// strPos = QString("Start:(%1 , %2) End:(%1 , %2)").arg(QString::number(line.p1().x())).arg(QString::number(line.p1().y())).arg(QString::number(line.p2().x())).arg(QString::number(line.p2().y()));
//}
//break;
//case UserType_Point:
//{
// strPos = QString("Pos:(%1 , %2)").arg(QString::number(pos.x())).arg(QString::number(pos.y()));
//}
//break;
//case UserType_Circle:
//{
// CircleItem *pItem = (CircleItem*)this;
// strPos = QString("Pos:(%1 , %2) radius: %3").arg(QString::number(pos.x() - pItem->radius())).arg(QString::number(pos.y() - pItem->radius())).arg(QString::number(pItem->radius()));
//}
//break;
//default:
// bSelected = false;
// break;
//}
if (bSelected)
{
if (tr("") != m_strUsage)
strPos = m_strUsage + tr(" ") + strPos;
foreach(QGraphicsItem *child, childItems())
{
child->setVisible(true);
child->installSceneEventFilter(this);
}
emit emitPosInfo(strPos);
}
}
void DrawItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
foreach(QGraphicsItem *child, childItems())
{
child->setVisible(true);
child->installSceneEventFilter(this);
}
}
void DrawItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
foreach(QGraphicsItem *child, childItems())
child->setVisible(false);
}
void DrawItem::preparePaint(QPainter *painter, const QStyleOptionGraphicsItem *option)
{
QPen oldPen = pen();
if (this->data(2).toBool())
{
oldPen.setColor(Qt::red);
oldPen.setWidth(0);
}
else
{
if (option->state & QStyle::State_Selected)
{
oldPen.setColor(Qt::yellow);
oldPen.setWidth(0);
}
else if (this->data(1).toBool())
{
oldPen.setColor(Qt::darkYellow);//wanghan add 1022 exclude ROI m_nUsaged =1;
oldPen.setWidth(0);
}
else if (!this->data(1).toBool())
{
oldPen.setColor(Qt::blue);//wanghan add 1022 included ROI为蓝色 m_nUsaged =1;
oldPen.setWidth(0);
}
else
{
oldPen.setColor(Qt::green);//wanghan add 1022 ROI绿色 m_nUsaged =0;
oldPen.setWidth(0);
}
}
painter->setPen(oldPen);
}
QVariant DrawItem::itemChange(GraphicsItemChange change, const QVariant &value)
{
if (change == ItemSelectedHasChanged)
{
if (value.toBool())
setZValue(100);
else
updateZValue();
}
return QGraphicsItem::itemChange(change, value);
}
RectBoundItem::RectBoundItem(QGraphicsItem *parent, Shape shape, bool rotatable) : DrawItem(parent), m_shape(shape), m_rotatable(rotatable)
{
m_rotation = 0;
m_size = QSizeF(0, 0);
/*m_handles.clear();
m_handles.push_back(new HandleItem(HandleItem::Role_ResizeTopLeft, this));
m_handles.push_back(new HandleItem(HandleItem::Role_ResizeTopRight, this));
m_handles.push_back(new HandleItem(HandleItem::Role_ResizeBottomLeft, this));
m_handles.push_back(new HandleItem(HandleItem::Role_ResizeBottomRight, this));
if (!m_rotatable && m_shape != Shape_Circle)
{
m_handles.push_back(new HandleItem(HandleItem::Role_ResizeTop, this));
m_handles.push_back(new HandleItem(HandleItem::Role_ResizeBottom, this));
m_handles.push_back(new HandleItem(HandleItem::Role_ResizeLeft, this));
m_handles.push_back(new HandleItem(HandleItem::Role_ResizeRight, this));
}
else if (m_rotatable)
{
m_handles.push_back(new HandleItem(HandleItem::Role_RotateLeft, this));
m_handles.push_back(new HandleItem(HandleItem::Role_RotateTop, this));
m_handles.push_back(new HandleItem(HandleItem::Role_RotateRight, this));
m_handles.push_back(new HandleItem(HandleItem::Role_RotateBottom, this));
}
*/
/*if (rotatable)
{
foreach(HandleItem *handle, m_handles)
{
handle->setCursor(Qt::ArrowCursor);
}
}*/
setSize(QSizeF());
}
RectBoundItem::~RectBoundItem()
{
/*foreach(HandleItem *handle, m_handles)
{
delete handle;
handle = NULL;
}
m_handles.clear();*/
}
void RectBoundItem::setSize(const QSizeF &size)
{
if (m_size == size && !m_rotatable)
return;
prepareGeometryChange();
m_size = size;
updateZValue();
update();
//updateHandlePos();
}
QRectF RectBoundItem::boundingRect() const
{
//qreal adjust = DEFAULT_HANDLE_RADIUS / viewScale(this);
//return QRectF(-m_size.width() / 2, -m_size.height() / 2, m_size.width(), m_size.height()).adjusted(-adjust, -adjust, adjust, adjust);
return QRectF(-m_size.width() / 2, -m_size.height() / 2, m_size.width(), m_size.height());
}
void RectBoundItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget * widget)
{
preparePaint(painter, option);
QRectF rect = QRectF(-m_size.width() / 2, -m_size.height() / 2, m_size.width(), m_size.height());
//if (m_shape == Shape_Rect)
painter->drawRect
没有合适的资源?快使用搜索试试~ 我知道了~
QGraphicsView截图.zip
共51个文件
obj:10个
cpp:10个
tlog:9个
需积分: 48 43 下载量 197 浏览量
2020-05-07
22:01:39
上传
评论 2
收藏 18.41MB ZIP 举报
温馨提示
QT 通过图形视图框架(支持场景(Scene)中的图元(Item)进行精确的双精度交互功能。图元可以处理键盘事件、鼠标按下、移动、释放和双击事件,同时也能跟踪鼠标移动)鼠标左键点击 实现截图功能
资源推荐
资源详情
资源评论
收起资源包目录
QGraphicsView截图.zip (51个子文件)
QGraphicsView
QTGraphicsView2018
QTGraphicsView2018.v12.suo 37KB
QTGraphicsView2018
ImageScene.h 663B
qtgraphicsview2018.cpp 6KB
qtgraphicsview2018.ui 3KB
qtgraphicsview2018.qrc 78B
ImageScene.cpp 3KB
ImageView.cpp 420B
qtgraphicsview2018.h 655B
Resources
QTGraphicsView2018.vcxproj.filters 4KB
QTGraphicsView2018.vcxproj.user 877B
x64
Debug
ImageView.obj 205KB
vc120.pdb 3.73MB
moc_qtgraphicsview2018.obj 351KB
QTGraphi.B12702AD.tlog
CL.write.1.tlog 8KB
CL.read.1.tlog 442KB
custombuild.read.1.tlog 2KB
cl.command.1.tlog 13KB
link.write.1.tlog 3KB
link.command.1.tlog 4KB
link.read.1.tlog 7KB
custombuild.write.1.tlog 3KB
custombuild.command.1.tlog 6KB
QTGraphicsView2018.lastbuildstate 192B
moc_ImageScene.obj 182KB
qrc_qtgraphicsview2018.obj 6KB
QTGraphicsView2018.log 4KB
main.obj 347KB
moc_ImageView.obj 193KB
ImageScene.obj 229KB
DrawItem.obj 385KB
QTGraphicsView2018.Build.CppClean.log 3KB
qtgraphicsview2018.obj 500KB
moc_DrawItem.obj 182KB
main.cpp 195B
GeneratedFiles
qrc_qtgraphicsview2018.cpp 1KB
ui_qtgraphicsview2018.h 5KB
Debug
moc_ImageScene.cpp 3KB
moc_qtgraphicsview2018.cpp 4KB
moc_ImageView.cpp 4KB
moc_DrawItem.cpp 4KB
DrawItem.h 3KB
ImageView.h 324B
DrawItem.cpp 15KB
QTGraphicsView2018.vcxproj 30KB
x64
Debug
QTGraphicsView2018.ilk 1.51MB
QTGraphicsView2018.exe 189KB
savePic.png 43KB
saveCutPic.png 94KB
QTGraphicsView2018.pdb 3.79MB
QTGraphicsView2018.sln 1KB
QTGraphicsView2018.sdf 54.63MB
共 51 条
- 1
资源评论
wanghan312
- 粉丝: 4
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功